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

Nic*_*ick 5 c++ memory-leaks visual-studio-2012

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

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

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

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我添加此代码以直接输出到控制台:

_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 );
Run Code Online (Sandbox Code Playgroud)

输出是:

在此输入图像描述

kjp*_*kjp 0

你包括了吗<crtdbg.h>

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

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

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

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
Run Code Online (Sandbox Code Playgroud)