返回動態記憶體 malloc

2021-06-27 00:54:20 字數 895 閱讀 6021

#include

#include

void getmemory(char *p)

int main()

此段**有錯,getmemory(str)中引數問題。編譯器會為每個函式的引數都複製乙份臨時副本,指標引數 p 的副本在c中是_p,並且對_p賦值為p ,即 _p = p 。如果在getmemory函式體內修改了 _p,則導致引數 p 的內容做相應的修改。這就是指標可用作輸出引數的原因。

但此處中getmemory 函式的 _p 申請了新記憶體,此時 _p 所指的記憶體位址改變了,但是 p 沒變。所以每次呼叫getmemory都會造成記憶體洩露。

形參p的域只在函式裡有效,p一開始指向你想要的位址,但是當你重新分配記憶體的時候p指向了新的位址,當你返回函式的時候原來的位址還是空的。

要在函式裡返回記憶體有兩種辦法,一種是指標的指標 **p ,用這個指標指向乙個需要分配記憶體的值。另外一種方法更簡單,你在函式裡創造乙個指標然後 return他就可以了。

正確**:

#include

#include

#include

#include

using namespace std;

char * getmm(int mm)

void getm(char **p,int mm)

int main(void)

{char *str = null;

str = getmm(100);

printf("%s\n",str);

if(str!=null)

free(str);

cout << endl;

char *ps = null;

getm(&ps,100);

cout << "ps=" << ps <

使用malloc不能返回動態記憶體

閱讀此篇前可以先閱讀 指標變數的傳值和傳址 include include void getmemory char p int main 執行結果 程式崩潰,getmemory中的malloc 不能返回動態記憶體,free 對str操作很危險。當引數是指標時容易忽略,請不要用值傳遞 這樣會導致str...

malloc函式 動態記憶體分配

malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void 型別。void 表示未確定型別的 指標。c,c 規定,void 型別可以 強制轉換 為任何其它型別的指標。原型 extern void malloc unsigned int num bytes 標頭檔案 在tc2....

動態記憶體分配 malloc 和free

1 通過查詢gcc的man手冊,我們可以看到malloc的函式原型 void malloc size t size 分配長度為size位元組的記憶體塊 1 返回值是void指標,void 表示未確定型別的指標,void 可以指向任何型別的資料,指標指向的型別是不確定的,這個指標在需要的時候可以被強制...