[英]How to check deallocation of memory
如何檢查指針p指向的內存是否已成功釋放?
簡而言之:您不能。
查看類似Valgrind的工具,以幫助您調試內存泄漏問題。
您應該考慮的其他一些事項:
delete
無效, vector
,...)而不是自己滾動, 抱歉,很簡短的回答“你不能”
使用IBM Rational Purify工具檢查內存的正確釋放。
定義成功! 定義釋放!
釋放內存后(無論它是空閑的還是刪除的),都不能再次使用該指針。 所有其他假設均無關緊要。
畢竟,您調用C / C ++運行時來釋放內存,但是C / C ++運行時也調用操作系統的功能來釋放頁面。 您甚至可以在C / C ++運行時之上使用自定義內存分配器,例如使用緩存來實現更快的內存分配算法。
所有這些層都可以為自己保留釋放的內存(由於碎片,或者僅僅因為他們喜歡將其保留給自己),或者可以告訴底層進行釋放。 可能發生任何事情,只是不再使用該指針。
異常處理。 即嘗試/抓住塊。
在C ++中,您可以放心地認為釋放不會失敗。 析構函數不得拋出異常,並且保留的實際內存應永遠不會被釋放,因此鑒於這兩點,任何事情都不會出錯。
但是,如果刪除已經刪除的指針,則程序可能會崩潰。 不過,這本身並不是釋放的問題-原始delete
成功完成了。 如果程序嘗試兩次刪除一個指針,這是程序內存管理的問題,但是對於現代STL和智能指針(如std::vector
, std::unique_ptr
等)來說,這幾乎是不必要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.