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

标签 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;
}

编辑:

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

_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

最佳答案

你有没有包括<crtdbg.h>

你确定你在 Debug模式下运行吗?

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

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

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

关于c++ - 为什么 _CrtDumpMemoryLeaks 在这里报告内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292930/

相关文章:

python - WireShark 消息

c# - 使用 C# 的快速快捷方式放置变量

c++ - 如何使用new在C++中声明2d数组?

c++ - 堆栈对象的延迟初始化?

java - 我需要显式释放 FullHttpRequest.content().copy() 吗?

javascript - 我们需要在 JavaScript 中使用 “unset” 变量吗?

c# - 为什么垃圾收集器不收集用户控件?

c++ - 在 OpenGL 中使用多边形绘制二维粗圆弧

c++ - 在 C++ 中将文件输入到多个数组

在 MVSC 中为 cURL 创建字符串流