1、利用系统带的函数:EnableMemLeakCheck() 和 函数重载,能快速准备的定位到内存泄漏的地方。
#include <crtdbg.h>
#ifdef _DEBUG //重载一下new函数,这样能得到使用new 开辟空间而发生泄漏的文件和所在行,这就是定位
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void EnableMemLeakCheck() //用于检测是否有内存泄漏。
{
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)|_CRTDBG_LEAK_CHECK_DF);
}
void main()
{
EnableMemLeakCheck();
int *leak = new int[10];
}
重载了new函数,这样能够得到使用new开辟空间而发生的内存泄漏的文件和所在的行。
2、使用VLD(visual Leak Detector)
从此处下载安装VLD下载。安装完成后,会自动将其include目录添加到VS的附加安装目录,将其静态库目录(lib目录)添加到VS的附加库目录,无需手动添加include目录和lib目录。
然后在main函数所在的CPP文件中include<vld.h>即可,运行程序,退出后产生检测报告。
注意事项:
1 如果有include"stdafx.h",则include <vld.h>放在其后,否则放在最前面
2 VLD只在debug版本有效
3 如果想将产生的日志保存到文件中,需要将vld.ini(VLD安装目录下)复制到可执行文件目录下,
然后作如下修改:
ReportFile =.\memory_leak_report.txt
ReportTo = both
测试程序如下:
#include "stdafx.h"
#include "vld.h"
int main(){
int *p=new int[10];
}