#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
然后在程序开始的时候写上:
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
这样在调式程序结束后,内存泄露就会转储到输出子窗口的调试模式中。
只需要按F5,在调试状态下运行,程序退出后在"输出窗口"可以看到有无内存泄露。如果出现
Detected memory leaks! Dumping objects ->
就有内存泄露。
确定内存泄露的地方
根据内存泄露的报告,一种比较简单的方法,就是已经把内存泄露映射到源文件的,可以直接在"输出"窗口中双击包含文件名和行号的行。例如
Detected memory leaks! Dumping objects -> C:PROGRAM FILESVISUAL STUDIOMyProjectsleaktestleaktest.cpp(20) : {18} normal block at 0x00780E80, 64 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD Object dump complete. C:PROGRAM FILESVISUAL STUDIOMyProjectsleaktestleaktest.cpp(20)
就是源文件名称和行号。