2008-12-09 55 views
4

有許多方法可以檢查程序是否存在內存泄漏。你最終得到泄露內存塊的指針列表,但是有沒有一種方法可以找出每個塊的更多信息?例如:如果我知道該對象是一個字符串,那麼實際的字符串值可以使查找泄漏變得更容易。在C++中查找未知對象的類型

RTTI中是否存在一個後門,使其成爲可能?

需要解決的問題是,當你得到指針時,運行時系統已經處於關閉狀態,你會得到原始的內存塊指針而不是指向對象的指針(雖然在很多情況下可能是相同的) 。

回答

6

RTTI可能無法幫到你。 RTTI僅適用於類具有虛擬方法,並非所有分配都是具有虛擬方法的對象。

你真正需要做的是有一些方法來將堆棧跟蹤附加到你的分配。然後你可以得到關於內存分配的信息。如果它是泄露內存的對象,你會尋找一個類構造函數。

無論如何,有沒有這樣的東西呢?是。免費的Windows庫是Visual Leak Detector。還有更多全功能的商業產品(比如Bounds Checker和IBM的Rational Purify),但VLD非常棒。它幫助我無數次地發現內存泄漏。

5

我使用valgrind --leak-check = full,這會給我一個堆棧跟蹤每個泄漏塊的分配站點。這種信息是方式比只是類型信息更有用。 valgrind(像「瓦爾咧嘴笑」發音)岩石

0

像諾曼我主張valgrind。 這對於分析堆棧跟蹤是一個很好的建議!

我使用它構建在KDevelop中。