2011-04-03 114 views
6

我在尋找內存泄漏檢測庫。 就像我只是將它包含到源代碼中,然後它應該開始檢測。外部程序可能是好的,但我正在尋找一些可鏈接到可執行文件的庫。
這是我在尋找Windows。C++內存泄漏自動檢測庫

回答

4

您可以在代碼中使用一些技術來檢測內存泄漏。檢測最常見也是最容易的方法是,定義一個宏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這樣的函數的內存泄漏。但是,它可以使用起來非常簡單,並且與更多的 完整的內存調試器解決方案相比,速度更快。

+1

+1 from me。這是我最喜歡的檢測泄漏方法之一,但保留一個分配的地址列表並檢查它們是否與每次刪除時發送刪除的地址一致,這是性能激勵(O(n)= nlog(n))。 ,只能在調試版本中使用該技術,而不能在發佈版本中使用。 – 2011-04-04 05:52:40

+0

@Als:我認爲很明顯,這種技術應該只用於調試版本,因爲我選擇的宏名稱(或通常選擇的)是'DEBUG_NEW'。 – Nawaz 2011-04-04 05:54:58

+0

只是明確提到相同。反正你有我的+1 :)我看不到任何麒麟,就像其他日子一樣.... – 2011-04-04 05:57:55

0

除了以上,我可以告訴幾個好程序:^)例如?對於Windows使用deleaker會很好。