簡體   English   中英

如何檢查內存的釋放

[英]How to check deallocation of memory

如何檢查指針p指向的內存是否已成功釋放?

簡而言之:您不能。

查看類似Valgrind的工具,以幫助您調試內存泄漏問題。

您應該考慮的其他一些事項:

  • 使用智能指針,這樣您就不必考慮內存管理,
  • 釋放指針后,將其設置為0,以便進一步delete無效,
  • 使用標准類( vector ,...)而不是自己滾動,
  • 最后,不要使用指針(實際上您幾乎可以使用)

抱歉,很簡短的回答“你不能”

使用IBM Rational Purify工具檢查內存的正確釋放。

定義成功! 定義釋放!

釋放內存后(無論它是空閑的還是刪除的),都不能再次使用該指針。 所有其他假設均無關緊要。

畢竟,您調用C / C ++運行時來釋放內存,但是C / C ++運行時也調用操作系統的功能來釋放頁面。 您甚至可以在C / C ++運行時之上使用自定義內存分配器,例如使用緩存來實現更快的內存分配算法。

所有這些層都可以為自己保留釋放的內存(由於碎片,或者僅僅因為他們喜歡將其保留給自己),或者可以告訴底層進行釋放。 可能發生任何事情,只是不再使用該指針。

異常處理。 即嘗試/抓住塊。

  1. 一些進行靜態代碼分析的工具可能會指出有關內存釋放的一些問題。
  2. 使用valgrind檢查是否有內存泄漏
  3. 避免使用原始指針-改用智能指針

在C ++中,您可以放心地認為釋放不會失敗。 析構函數不得拋出異常,並且保留的實際內存應永遠不會被釋放,因此鑒於這兩點,任何事情都不會出錯。

但是,如果刪除已經刪除的指針,則程序可能會崩潰。 不過,這本身並不是釋放的問題-原始delete成功完成了。 如果程序嘗試兩次刪除一個指針,這是程序內存管理的問題,但是對於現代STL和智能指針(如std::vectorstd::unique_ptr等)來說,這幾乎是不必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM