Windows下 VC++的内存泄漏与定位

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];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值