如何檢查指針指向的內存是否已成功解除分配?如何檢查內存釋放
如何檢查內存釋放
回答
簡而言之:你不能。
查看諸如Valgrind之類的工具來幫助您調試內存泄漏問題。
其他有些事情你應該考慮:
- 使用智能指針,這樣你就不用做考慮內存管理,
- 設置你的指針爲0,你讓他們自由後,使進一步
delete
沒有任何效果, - 使用標準類(
vector
,...),而不是滾動您自己, - 最後,不要使用指針(實際上你幾乎可以)
如何將指針設置爲0有助於解決此問題? – 2010-11-10 10:26:03
避免雙重問題。這可能是OP想要的。 – 2010-11-10 10:27:06
將指針設置爲0太糟糕了,這是一個UB。 – 2010-11-10 10:28:13
對不起,很簡短的回答「你不能」
使用IBM rational purify工具來檢查內存的正確釋放。
- 一些正在做靜態代碼分析的工具可以指出一些關於內存釋放的問題。
- 使用的valgrind檢查是否有內存泄漏
- 避免原始指針 - 使用智能指針代替
定義成功!定義釋放!
釋放內存(無論是空閒還是刪除)之後,您不能再使用該指針。所有其他假設都是不相關的。
畢竟,您調用C/C++運行時來釋放內存,但C/C++運行時還會調用操作系統的函數來釋放頁面。你甚至可以在C/C++運行庫的頂部有一個自定義的內存分配器,例如,使用緩存來實現更快的內存分配算法。
所有這些層可能會爲自己保留已釋放的內存(由於碎片或僅僅因爲他們喜歡保留自己),或者可能會通知底層去釋放它。任何事情都可能發生,只是不要再使用那個指針。
在C++中,您可以安全地假定重新分配永遠不會失敗。析構函數不能拋出異常,並且保留的實際內存永遠不會被釋放,所以給出這兩點,什麼都不會出錯。
但是,如果您刪除了一個已被刪除的指針,那麼您的程序可能會崩潰。雖然這不是解除分配本身的問題 - 原始delete
成功運行。這是一個與你的程序的內存管理問題,如果它試圖刪除一個指針兩次,但是這與現代STL和像std::vector
,std::unique_ptr
等智能指針很少有必要...
異常處理。即嘗試/ catch塊。
不正確;析構函數不能拋出異常,所以這不會做任何事情。 – 2012-10-31 13:43:24
好點。謝謝。 – 2012-10-31 13:56:09
- 1. 如何釋放Canvas內存?
- 2. 如何釋放內存頁
- 3. PtrToStringChars,如何釋放內存?
- 4. 如何釋放內存?
- 5. Informix - 如何釋放內存?
- 6. 如何釋放gpu內存?
- 7. 釋放內存
- 8. 釋放內存
- 9. 何時會釋放內存?
- 10. confise何時釋放內存
- 11. ç釋放內存
- 12. 釋放ScrollView內存
- 13. QList內存釋放
- 14. JNI釋放內存
- 15. OpenCV釋放內存?
- 16. 與釋放內存
- 17. Javascript內存釋放
- 18. QWebView內存釋放
- 19. UINavigationViewController內存釋放
- 20. 內存不釋放
- 21. 內存不釋放
- 22. NSData釋放內存
- 23. Three.js - 釋放內存
- 24. 釋放內存forcelly
- 25. iPhone - 釋放內存
- 26. 釋放lpsolve內存
- 27. mongodb內存釋放
- 28. 如何分配內存以及如何釋放內存?
- 29. 如何檢查android.hardware.Camera是否被釋放?
- 30. 如何釋放V8聲明的內存?
需要更多細節:最初分配的內存是如何的?和*爲什麼*你需要檢查它是否被釋放? – 2010-11-10 10:23:45
在應用程序層,它不能。但是,如果你在一些非常低層的內核層工作,可能有辦法做到這一點。 – Chubsdad 2010-11-10 10:27:58
Yeap,你試圖解決什麼是真正的問題? – sharptooth 2010-11-10 10:30:03