为什么_CrtDumpMemoryLeaks报告内存泄漏吗?(Why is _CrtDumpMemo

2019-07-30 05:15发布

我要检查在调试模式下内存泄漏。 我使用的是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 );

输出是:

Answer 1:

你包括<crtdbg.h>

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

在非调试模式-调用_CrtDumpMemoryLeaks()由预处理器除去留下只if(TRUE)

编辑:你也需要检测内存泄漏,添加以下线使用malloc和free的调试版本-见这里 。 你可以尝试添加这些?

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>


文章来源: Why is _CrtDumpMemoryLeaks reporting a memory leak here?