为什么_CrtDumpMemoryLeaks在这里报告内存泄漏?

时间:2012-07-02 11:40:57

标签: c++ memory-leaks visual-studio-2012

我想在DEBUG模式下检查内存泄漏。为了完成这项工作,我使用了函数_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 );

输出结果为:

enter image description here

1 个答案:

答案 0 :(得分:0)

您是否包含<crtdbg.h>

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

在非调试模式下,预处理器会删除对_CrtDumpMemoryLeaks()的调用,只留下if(TRUE)

编辑: 另外,要检测内存泄漏,您需要添加以下行以使用malloc和free的调试版本 - 请参阅here。你能尝试添加这些吗?

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