我有一个代码,我想在其中测试总共发生了多少内存分配,并且由于crt输出显示哪个n内存分配泄露,我故意在我的代码中构建一些泄漏,例如
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <stdint.h>
#include <memory>
#include <Windows.h>
#include <time.h>
#include "ipp.h"
int main(...) {
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG);
double* temp0 = new double[4];
/* do something */
double* temp1 = new double[4];
_CrtDumpMemoryLeaks();
return 0;
}
但由于某种原因,我没有得到DumpMemoryLeaks()的输出。任何人都知道这里会发生什么?在调试模式下运行。
编辑:我还检查了反汇编,它只是跳过那些_Crt行而没有做任何事情。
答案 0 :(得分:1)
您发布的代码将正确的输出写入Visual Studio 2013中的输出窗口:
检测到内存泄漏!转储对象 - &gt; {123}正常阻止 0x01140050,长度为32个字节。数据:&lt; &GT; CD CD CD CD CD CD CD CD CD CD CD CD CD CD {122}正常块在0x0113FFF0,32 字节长。数据:&lt; &GT; CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD对象转储完成。
答案 1 :(得分:0)
尝试在调试模式下运行你的程序:F5