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

2021-08-20 16:14:17 字數 686 閱讀 3499



2023年09月12日 20:02:47

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

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

#include

#include

#include

int main()

free(p);

return 0;

}這是因為在給動態記憶體的賦值過程中,賦予的值超出了動態記憶體的大小,從而引起錯誤。

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

前一段時候在做專案的時候碰到了執行時程式崩潰的問題,定位到了是free(p);這個語句出錯誤,找了半天資料解決了,現在寫下一點自己的總結。

這個問題有可能是以下4個原因構成,一一排查一般都可以解決:

1 釋放乙個空指標,這個就不用多說了,短點除錯不會也會列印吧 printf("%x",p);可以列印出16進製制數

2 重複釋放,這個問題也很好解決,在所有的釋放語句後都賦值指標為空,按照1來排查

3 釋放乙個非自己申請的記憶體,或者釋放的指標指向的地方不是本程序申請的。這個的排查方式就是在所有的malloc申請的時候列印出位址,看看和釋放的對應不對應。具體看1

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

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

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...