2015-01-20 90 views
1

如您所知,在我們完成使用動態變量後我們free()他們。檢查內存是否已經在C中被釋放

但是,有時這些變量已經是free() d。

我需要檢查它是否是免費的,以避免雙倍免費。有人會給我一個線索嗎?

+2

中斷功能在任何情況下都不能嘗試釋放它。如果您將此作爲公理,您將被迫對您的設計進行其他更改。這些變化可能是必要的,而不是這一個。 – 2015-01-20 21:19:40

+1

另請參閱[XY問題](http://meta.stackexchange.com/a/66378/173950) – 2015-01-20 21:20:33

+4

如果您使用的是C++,正如您的標題所示,爲什麼您使用'malloc'和'free' ? – 2015-01-20 21:26:11

回答

12

你不能檢查它是否已經是free'd(free的簽名應該告訴你很多;它不能從調用者的角度修改指針)。但是,你可以做兩件事之一。

  1. 更改您的設計。誰負責這個記憶?看起來好像你的設計沒有說清楚,這是內存泄漏的最常見原因。把所有權放在你的代碼的一部分上,並完成它。爲什麼中斷函數有條件地釋放內存?爲什麼這看起來是最合乎邏輯的解決方案?

  2. 將指針設置爲null並雙倍釋放所有你喜歡的東西。 free(NULL)是完全有效的。


我寧願選擇1,現在學習本課程將幫助你編寫更好的代碼的道路。

+0

謝謝。我會測試他們,然後回來。 – Moi 2015-01-20 21:24:11

4

+1給Ed S.的答案。

但是,也運行valgrind - 它會很快拾取許多動態內存分配錯誤,並且可能比您更好地閱讀代碼。

+0

謝謝@abligh – Moi 2015-01-20 22:59:01