我正在寫一些Windows軟件,並終止時,我得到了很多不正確的內存泄漏消息的處理:與不正確的內存泄露報告在Windows
Detected memory leaks!
Dumping objects ->
{29745} normal block at 0x02938E38, 36 bytes long.
Data: <, E > 2C 0B 45 10 00 00 00 00 01 00 00 00 01 CD CD CD
{29732} normal block at 0x02938C08, 500 bytes long.
Data: <X)A ` @> 58 29 41 10 00 00 00 00 01 00 00 00 60 93 0B 40
{29721} normal block at 0x028DA8A0, 84 bytes long.
Data: < 1D 0 %i> C8 31 44 10 00 00 00 00 01 00 00 00 30 85 25 69
我敢肯定這是假陽性。你有處理這個問題的建議嗎?隨着軟件的發展,可能會出現一些實際的泄漏,至少可以說,發現它們將是困難的。
編輯:
我應該提到,我使用了一個名爲OpenSceneGraph
庫。它在引用計數的智能指針的內部大量使用。所有這些泄漏都是我new
然後傳遞到庫中的實例,它立即將它包裝在ref_ptr<>
中。我知道這些實例沒有泄漏,因爲我已經將fprintf
添加到析構函數中,並且當智能指針超出範圍時我會看到消息。前一段時間,微軟有一個像標準庫一樣的問題,我想知道我在這裏看到類似的東西嗎?顯然這個bug與_CRT_BLOCKS
被標記爲_NORMAL_BLOCKS
有關。
編輯2:
我想通了,這是怎麼回事。轉儲內存泄漏信息的代碼發生在所有靜態數據超出範圍之前。在一種情況下,內部對象是通過原型構造的,並且原型對象是靜態的,所以在atexit機器啓動之前不會被銷燬。所以,沒有什麼是真正的泄漏。它只是在應用程序拆卸發生之前發生轉儲。
你怎麼能確定他們是誤報? – 2009-02-10 16:06:14
我敢打賭你他們不是誤報。相反,我會花時間和資源來理解爲什麼會有內存泄漏。 你能發佈你的源代碼嗎? – cbrulak 2009-02-10 16:12:15
我知道它們是誤報,因爲我添加了代碼以在構造函數和析構函數中記錄消息。我的日誌有兩個消息。 – criddell 2009-02-10 18:07:29