5

我想在 DEBUG 模式下检查内存泄漏。我使用 Windows,并使用函数_CrtDumpMemoryLeaks来完成这项工作。

现在,为什么这段代码会发现内存泄漏?

#include <Windows.h>
#include <iostream>

int main()
{
    if(_CrtDumpMemoryLeaks() == TRUE)
        std::cerr << "MEMORY LEAK!" << std::endl;

    return 0;
}

编辑:

我将此代码添加到将输出定向到控制台:

_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );

输出是:

在此处输入图像描述

4

1 回答 1

0

你包括了<crtdbg.h>吗?

你确定你在调试模式下运行吗?

在非调试模式下 - 调用_CrtDumpMemoryLeaks()被预处理器删除,只剩下if(TRUE)

编辑:还要检测内存泄漏,您需要添加以下行以使用 malloc 和 free 的调试版本 - 请参见此处。你可以尝试添加这些吗?

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
于 2012-07-02T11:57:12.967 回答