VC CRT 内存泄漏检测

1 篇文章 0 订阅
1 篇文章 0 订阅

1. 开启CRT

在程序入口C/CPP文件增加如下头文件, 注意宏 _CRTDBG_MAP_ALLOC 要放在前面

#define _CRTDBG_MAP_ALLOC 
#include<stdlib.h>
#include<crtdbg.h>

在程序结束前调用

_CrtDumpMemoryLeaks()

这样程序结束时就会在调试输出窗口得到内存泄漏信息。 如下图。 你点击就会定位到相应的源文件,但不是所有的都行


2. MFC 里的CRT

MFC里默认已经增加了, 请google 查询

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

3. 定位泄漏点

a. 如果泄漏是你直接造成的, 那么你直接点击报告行就会自动定位。

b. 如果是外面DLL造成的(也许是你写的,src也在项目里,但CRT不认). 那你得通过下条件断点观察callstack来定位:

参考: How to Find the Source of Memory Leaks
详细方法为:

i'. 随便找个要申请内存的地方,单步跳进去, 到到找到如下几行:

 在这里下断点

ii'. 找到你要查找的申请编号(Allocate Number) (如下图红框内数字), 然后将上面的断点改成条件断点,条件为: lRequest==申请编号

ii'. 运行你的程序, 爽, 出来了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值