碰到乙個指標的問題,記錄一下。
都知道,使用指標作為函式形參,可以在函式內修改其指向的內容。
將函式的形參返回,會因為生存期的問題,不能得到正確返回值。
如果返回的是new出來的指標變數(存在堆上,不在棧上),那麼函式結束,就不會被該記憶體就不會被收回。
有以上,我們來看下面的問題
void getmemory(char *p)
void test(void)
在getmemory中傳入指標變數,然後在函式內對其進行動態記憶體分配,然而並不會出現理想輸出。
是因為通過getmemory不能傳遞動態記憶體。test中的str一直是null
但是回去看第一句話,如果使用指標作為函式形參,可以在函式內修改其指向的內容。
引申過來,我們能不能用指標的指標作為形參,然後給該指標動態分配記憶體呢?答案是可以的
void getmemory2(char **p, int num)
void test(void)
以上**先定義char* str ,然後使用&str傳入str的位址,然後給 str 分配的動態記憶體。但是好像由於使用了&str,會發生記憶體洩漏?
所以最好還是使用返回指標的形式,進行動態記憶體分配。
char *getmemory()
void test(void)
動態記憶體與智慧型指標
動態記憶體與智慧型指標 靜態記憶體用來儲存區域性static物件 類static資料成員以及定義在任何函式之外的變數 全域性變數 棧記憶體用來儲存定義在函式內的非static物件。分配在靜態或棧記憶體中的物件由編譯器自動建立和銷毀。對於棧物件,僅在其定義的程式塊執行時才存在 static物件在使用之...
動態記憶體與智慧型指標
在c 中,動態記憶體的管理是通過一對運算子來完成的 new,在動態記憶體中為物件分配空間並返回乙個指向該物件的指標,我們可以選擇對物件進行初始化 delete,接受乙個動態物件指標,銷毀該物件並釋放與之關聯的記憶體。動態記憶體在使用時很容易出問題,有時會忘記釋放記憶體,造成記憶體洩露,有時在尚有指標...
動態記憶體與智慧型指標
我們先來看一些物件的生存期。全域性物件在程式啟動時分配,在程式結束時銷毀。區域性static物件在第一次使用前分配,在程式結束時銷毀。區域性自動物件,在進入其定義所在的程式塊兒時被建立,離開塊時銷毀。即,它們都是由編譯器自動建立與銷毀。而動態分配的物件的生存期與它們在 建立的無關,只有當顯式地被釋放...