2014-09-30 59 views
1

我似乎在Visual Studio內置內存泄漏檢測工具中遇到問題。 無論我做什麼,它總是檢測到內存泄漏。Visual Studio CrtDumpMemoryLeaks破碎?

這裏我有一個基本的C++主,啓用內存泄漏檢測(按照MSDN)。

#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 

int main(){ 

    _CrtDumpMemoryLeaks(); 
    return 0; 
} 

由於未知的原因,它說有內存泄漏。

Detected memory leaks! 
Dumping objects -> 
{142} normal block at 0x0000005934F90660, 16 bytes long. 
Data: < 3"    > C8 33 22 DC F6 7F 00 00 00 00 00 00 00 00 00 00 
Object dump complete. 

有沒有其他人經歷過這個? 有誰知道是什麼原因造成的?

P.S我使用Visual Studio 2013,但我也遇到過2012年和2010年

+0

這似乎很奇怪,但不設置報告模式。我很好奇,如果你設置了一個檢查點,同樣的事情發生,那麼從檢查點開始立即報告。 (我會自己檢查一下,但我沒有一個方便使用Windows的VS盒子。 – WhozCraig 2014-09-30 06:25:43

回答

0

的 「_CrtDumpMemoryLeaks();」將顯示內存在執行時的狀態,即您剛剛分配了內存塊。

int main(){ 
    std::string tmp("Hello"); 
    _CrtDumpMemoryLeaks(); //this will show you have a memory leak (in the string object) 
    return 0; 
} 

使用

int main(){ 
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 
    std::string tmp("Hello"); 
    return 0; 
} 

,你會發現在「輸出」窗口中的調試輸出程序退出後。由於系統已刪除字符串對象,因此沒有內存泄漏。

如果您還包括

#ifdef _DEBUG 
#define new new (_NORMAL_BLOCK , __FILE__ , __LINE__) 
#endif 

先在你的所有代碼文件(或第i個共同的.h文件中),你將獲得其中的違規分配內存的地方。

如果您重新定義了新的操作符,這將不起作用。