我在尋找內存泄漏檢測庫。 就像我只是將它包含到源代碼中,然後它應該開始檢測。外部程序可能是好的,但我正在尋找一些可鏈接到可執行文件的庫。
這是我在尋找Windows。C++內存泄漏自動檢測庫
回答
對於我來說,這是很長的時間的最佳工具: http://www.paulnettle.com/pub/FluidStudios/MemoryManagers/Fluid_Studios_Memory_Manager.zip 就包括1個文件就大功告成了吧:)
如果您使用的是VC++,則內置了該功能。有關非MFC應用程序的信息,請參見Finding Memory Leaks Using the CRT Library,MFC應用程序請參閱Detecting memory leaks in MFC。
Visual Studio在Windows上具有此功能。請參閱http://msdn.microsoft.com/en-us/library/e5ewb1h3(v=VS.90).aspx。在Linux下,我不知道是否存在這樣的情況,但valgrind真的很好找到所有類型的內存問題(不僅泄漏,而且例如無效讀取)。
我可以建議Visual Leak Detector,它比Visual Studio內置的更容易使用。
您可以在代碼中使用一些技術來檢測內存泄漏。檢測最常見也是最容易的方法是,定義一個宏DEBUG_NEW並將其與預定義的宏一起使用,例如__FILE__
和__LINE__
以查找代碼中的內存泄漏。這些預定義的宏會告訴你內存泄漏的文件和行號。
DEBUG_NEW僅僅是通常被定義爲一個宏:
#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW
所以您隨時隨地使用new
,還可以跟蹤哪些可以用來定位內存泄漏的文件和行號的你程序。
和__FILE__
,__LINE__
是predefined macros,它們分別評估您使用它們的文件名和行號!
閱讀下面的文章,其說明使用DEBUG_NEW與其他有趣的宏,很漂亮的技術:
A Cross-Platform Memory Leak Detector
從Wikpedia,
DEBUG_NEW是指技術, C++ 過載和/或重新定義運算符 新的和運算符刪除的順序到 攔截內存分配和 解除分配調用,從而調試內存使用的 程序。 經常 涉及定義一個名爲 DEBUG_NEW宏,使新成爲 像新(_ FILE _,_ LINE _) 記錄上 配置文件/行信息。 Microsoft Visual C++在其Microsoft「 基礎類中使用 此技術。有一些 方法來擴展此方法,以避免 使用宏重定義,而仍然 能夠顯示某些平臺上的文件/行 信息。這種 方法有許多固有的限制。它僅適用於C++,並且 無法捕獲像malloc這樣的函數的內存泄漏。但是,它可以使用起來非常簡單,並且與更多的 完整的內存調試器解決方案相比,速度更快。
除了以上,我可以告訴幾個好程序:^)例如?對於Windows使用deleaker會很好。
- 1. 內存泄漏沒有檢測到CRT內存泄漏檢測
- 2. VisualVM內存泄漏檢測
- 3. 檢測TWebModule內存泄漏
- 4. C++內存泄漏檢測方法
- 5. C#內存泄漏?
- 6. 內存泄漏C++
- 7. 內存泄漏C#
- 8. C#內存泄漏?
- 9. 內存泄漏C
- 10. 內存泄漏檢測工具
- 11. 使用AfxEnableMemoryTracking到檢測內存泄漏
- 12. 如何檢測內存泄漏
- 13. 檢測不到的內存泄漏
- 14. FastMM無法檢測到內存泄漏
- 15. Valgrind在fclose檢測到內存泄漏()
- 16. Windows API調用內存泄漏檢測
- 17. 檢測到的內存泄漏
- 18. DLL中的內存泄漏檢測
- 19. valgrind如何檢測內存泄漏
- 20. 檢測內存泄漏使用PerfView
- 21. Solaris 9:內存泄漏檢測
- 22. 內存泄漏單元測試C++
- 23. 內存泄漏測試
- 24. 內存泄漏測試
- 25. Xcode內存泄漏檢查
- 26. 檢查內存泄漏
- 27. iPhone內存泄漏JSON庫
- 28. curl庫的內存泄漏
- 29. 自動化對象泄漏內存(TConnectionPoints)
- 30. 內存泄漏自動釋放崩潰
+1 from me。這是我最喜歡的檢測泄漏方法之一,但保留一個分配的地址列表並檢查它們是否與每次刪除時發送刪除的地址一致,這是性能激勵(O(n)= nlog(n))。 ,只能在調試版本中使用該技術,而不能在發佈版本中使用。 – 2011-04-04 05:52:40
@Als:我認爲很明顯,這種技術應該只用於調試版本,因爲我選擇的宏名稱(或通常選擇的)是'DEBUG_NEW'。 – Nawaz 2011-04-04 05:54:58
只是明確提到相同。反正你有我的+1 :)我看不到任何麒麟,就像其他日子一樣.... – 2011-04-04 05:57:55