2

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

无法得到原因。

4

1 回答 1

4

请注意,如果您设置了 _CRTDBG_LEAK_CHECK_DF,那么您也不需要调用_CrtDumpMemoryLeaks(),因为它会在程序结束时自动为您调用。事实上,在你打电话的地方_CrtDumpMemoryLeaks(),还没有发生泄漏。

此外,这仅适用于通过 IDE 运行的调试版本,并且输出(如果有)被转储到 Visual Studio 的“输出”窗口,而不是控制台。

如果您删除对 IDE 的调用_CrtDumpMemoryLeaks()并运行,您将看到类似于以下内容(我使用的是 VS2012):

检测到内存泄漏!
转储对象 ->
c:\consoleapplication1.cpp(24) : {190} 位于 0x004CCAF0 的正常块,8 字节长。
数据:< > CD CD CD CD CD CD CD CD
c:\consoleapplication1.cpp(22) : {189} 正常块位于 0x004CCAB0,4 字节长。
数据:< L > F0 CA 4C 00
对象转储完成。

于 2013-03-27T06:56:26.730 回答