2013-03-27 36 views
0

我正在使用Visual Studio 2010,我嘗試使用VC提供的CRT庫來處理內存泄漏。但我無法在控制檯上看到內存泄漏打印輸出。 codebase:無法看到控制檯上的內存泄漏

#include <iostream> 
#include <vector> 

#define _CRTDBG_MAP_ALLOC 
#include <crtdbg.h> 
#ifdef _DEBUG 
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) 
#define new DEBUG_NEW 
#endif 

using namespace std; 

int main() 
{ 
_CrtSetDbgFlag (_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 
int Y = 1; 
int X = 2; 
int** superevil = new int*[Y]; 
for(int i = 0; i < Y; ++i) 
    superevil[i] = new int[X]; 

superevil[0][2] = 1; 

/*for(int i = 0; i < Y; ++i) 
    delete[] superevil[i]; 
delete[] superevil;*/ 

_CrtDumpMemoryLeaks(); 
return 0; 
} 

不能得到原因。

回答

3

請注意,如果您已經設置_CRTDBG_LEAK_CHECK_DF,那麼您也不需要撥打_CrtDumpMemoryLeaks(),因爲它在程序結束時會自動爲您調用。事實上,在您呼叫_CrtDumpMemoryLeaks()的地方,尚未發生泄漏。

此外,這隻適用於通過IDE運行的Debug版本和輸出 - 如果有的話 - 轉儲到Visual Studio中的輸出窗口而不是控制檯。

如果刪除調用_CrtDumpMemoryLeaks()並通過IDE中運行,你會看到類似以下內容(我使用VS2012)的東西:

檢測內存泄漏!
轉儲對象 - >
c:\ consoleapplication1.cpp(24):{190}位於0x004CCAF0的常規塊,長度爲8個字節。
CD CD CD CD CD CD CD
c:\ consoleapplication1.cpp(22):{189}位於0x004CCAB0的常規塊,長度爲4個字節。
數據:< L> F0 CA 4C 00
對象轉儲完成。

+0

thanxs,我明白了, – user1808932 2013-03-27 07:09:42