1. 程式人生 > >個人對於堆疊的理解(簡單通俗)

個人對於堆疊的理解(簡單通俗)

    最近在做安裝包(Inno Setup),也沒好好看C++,然後安裝包出了點小問題,說是堆溢位,自己也沒理解透堆疊這個概念,在這裡我就簡單的總結一下。

  1.堆

    在C++ 中,只有程式設計師自己分配的記憶體才會儲存到堆中,比如int *b = (int *)malloc(sizeof(int)*1)  這就算自己手動分配的一個,然後它就儲存在堆中,當你兩次呼叫的時候會發現,即使你不手動釋放記憶體,它的記憶體地址也會改變,所以造成的就是你越不釋放,然後不停的new記憶體就會越來越少,直到沒有。

  2.棧

    當然,在棧中剛好相反,比如int i = 0;  好,這個系統就自動分配到棧中,它會有一個記憶體地址,比如0X00b121c0,如果你不釋放,再重新呼叫的話,它的記憶體地址還是不會變的,即使你把裡面的內容拷貝替換了,下次還會給你分配這個地址,內容就是你替換的內容

說的....我都想抽自己了,舉例說下,就是說:

int main()

{

test();//第一次呼叫會發現copy的遠遠超出了i,然後再看地址會發現,紅色不坎入目

test();

  }

void test()

{

    int i;

   int j;

    char temp[] = "asdjklwqid";

   strcopy(i, temp);

    return 0;

}