_CrtDumpMemoryLeaks()会在调用时检测 此时刻 是否还有没释放的内存,如果有则报错返回。一般用于程序结束时调用,用于检测是否有内存没有释放(言外之意:内存泄漏了)
#include <crtdbg.h>
#ifdef _DEBUG //debug编译都是打开的
#define _CRTDBG_MAP_ALLOC //打开堆内存调试的开关(堆内存操作附加了额外信息:文件名,行号等)
但是测试中new并没有输出额外行号等信息,可能是_CRTDBG_MAP_ALLOC比new定义之后才定义?
不如直接使用如下宏定义:
#define new new(_NOMAL_BLOCK, __FILE__, __LINE__)
#define malloc(size) _malloc_dbg(size, _NOMAL_BLOCK, __FILE__, __LINE__)
确保有行号输出。
_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) //获取当前的flag值,有两个开关是默认打开的,重新设置时必须先拿出这些默认值再bit运算后,重新用_CrtSetDbgFlag设置新开关, _CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF
_CrtSetReportFile( int reportType, reportFile ); //Report type: _CRT_WARN, _CRT_ERROR, _CRT_ASSERT