无法在控制台上看到内存泄漏

时间:2013-03-27 06:51:44

标签: c++ memory-leaks memory-leak-detector

我正在使用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;
}

无法理解。

1 个答案:

答案 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
  对象转储完成。