我想在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 );
输出结果为:
答案 0 :(得分:0)
您是否包含<crtdbg.h>
?
您确定在调试模式下运行吗?
在非调试模式下,预处理器会删除对_CrtDumpMemoryLeaks()
的调用,只留下if(TRUE)
编辑: 另外,要检测内存泄漏,您需要添加以下行以使用malloc和free的调试版本 - 请参阅here。你能尝试添加这些吗?
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>