在源文件头部加入如下三行代码:
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
在main函数返回前加入下面一行代码:
_CrtDumpMemoryLeaks();
测试代码如下:
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main()
{
//_CrtSetBreakAlloc(71);
int* intPtr = new int(2);
_CrtDumpMemoryLeaks();
system("pause");
return 0;
}
则在输出窗口中,提示内存泄漏:
其中{71} 为内存编号, 紧接着是内存地址和长度;
Data为内存的对应数据
然后,在main函数起始部分加入一行代码:
_CrtSetBreakAlloc(71); // 71 为内存编号
此时,VS会在导致该内存泄漏的代码行产生一个断点中断。通过"调用堆栈",就能很快定位到问题代码。