我正在使用Visual Studio 2010,我尝试使用VC提供的CRT库来进行内存泄漏。但我无法在控制台上看到内存泄漏打印输出。 基本代码:
#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;
}
无法理解。
答案 0 :(得分:4)
请注意,如果您已设置_CRTDBG_LEAK_CHECK_DF,那么您也不需要调用_CrtDumpMemoryLeaks()
,因为它会在程序结束时自动为您调用。实际上,在您调用_CrtDumpMemoryLeaks()
的地方,尚未发生泄漏。
此外,这仅适用于通过IDE和输出运行的调试版本 - 如果有的话 - 转储到Visual Studio中的“输出”窗口,而不是转储到控制台。
如果删除对_CrtDumpMemoryLeaks()
的调用并通过IDE运行,您将看到类似于以下内容的内容(我使用的是VS2012):
检测到内存泄漏!
倾倒物体 - &gt;
c:\ consoleapplication1.cpp(24):{190}正常块,位于0x004CCAF0,长度为8个字节。
数据:&lt; &GT; CD CD CD CD CD CD CD CD c:\ consoleapplication1.cpp(22):{189}正常块,位于0x004CCAB0,长度为4个字节。
数据:&lt; L> F0 CA 4C 00
对象转储完成。