使用malloc和free時的一些注意事項

2021-08-08 03:21:32 字數 918 閱讀 2077

在c中,動態記憶體是乙個讓人又愛又恨的,這裡對malloc和free的使用進行一定的小介紹。

一般而言,先通過malloc(或calloc等函式)分配動態記憶體,然後通過free來進行記憶體的釋放。但有時會出現free失敗的情況。如下列程式:

#include

#include

#include

int main()

int i = 10;

int j = 0;

int * p = (int *)malloc(sizeof(int)*i);

while(jj++;

p[j] = j;

free(p);

return 0;

這是因為在給動態記憶體的賦值過程中,賦予的值超出了動態記憶體的大小(*p指向的是數量為10的陣列,即p[10]是不存在,但迴圈中給p[10]賦值了),從而引起錯誤。

因此,malloc和free結合起來可以用來對檢測是否對超出陣列範圍內的資料進行操作。

如下:# include

# include

# include

#define size 9

#if 0

int wf_buff(int * bu)

free(bu);

}#else

int wf_buff(int *bu)

}#endif

int main()

printf("\n%d\n",bu[size]);

// clean_buff(bu);

return 0;

}c++ new和delete產生的debug error:      

使用 malloc後free出錯 錯誤所在:             

vc++6.0檢視程式中記憶體:                         

使用malloc和free時的一些注意事項

2017年09月12日 20 02 47 在c中,動態記憶體是乙個讓人又愛又恨的,這裡對malloc和free的使用進行一定的小介紹。一般而言,先通過malloc 或calloc等函式 分配動態記憶體,然後通過free來進行記憶體的釋放。但有時會出現free失敗的情況。如下列程式 include i...

malloc和free的實現

被人問到malloc和free的實現問題。我們知道malloc的呼叫形式如 type p type malloc n sizeof type free的呼叫形式如 free p 好了,問題來了,free函式,我們只給傳入乙個指標,沒有傳入記憶體塊的大小n,那麼編譯器怎麼知道要釋放多少位元組的記憶體,...

malloc和free的區別

1,malloc與free是c c語言的標準庫函式,new delete是c 的運算子。它們都可用於申請動態記憶體和釋放記憶體。2,對於非內部資料型別的物件而言,光用maloc free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc f...