VC 内存泄露查找

本文介绍了一种在VC工程中检测内存泄漏的有效方法。通过设置特定的标志和断点,可以定位到具体的内存泄漏位置。此外,还提供了一个简单的代码示例来帮助开发者快速找出内存泄漏的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 VC工程有时候忘记释放使用NEW 关键字分配的资源,调试工程退出时提示:

Detected memory leaks!
Dumping objects ->
XXXXXX.cpp(19) :

{68} client block at 0x003F2D48, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003F2D48, 64 bytes long
{66} client block at 0x003F5F30, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003F5F30, 64 bytes long
{64} client block at 0x003F5DF0, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003F5DF0, 64 bytes long

上面提示说明了程序在{68},{66},{64}三个地方分配的资源没有被释放,我们使用如下方法可以把没有被释放的地方找出来

把如下代码放在程序的最开始地方(如构造函数),

运行程序后,程序会跳转到断点调试处(选择中断),

 

此时你打开“调用堆栈”窗口,即可找到 内存泄露之处

 

 泄漏检测代码如下:

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
_CrtSetBreakAlloc(629);//629为出错处地址
_CrtDumpMemoryLeaks();
 
//  写在后面:
//  关于内存泄漏检测,有一个Visual Leak Detector ,按照它的介绍的确很不错,可以直接具体到代码行指出内存泄漏,
 //但是个人使用了一下,发现debug的速度太慢了,不知道是不是我个人程序的问题.......
 //像上面的泄漏,我用CrtSetBreakAlloc这种简单的方法就足够了....

详细说明请参考以下连接,

http://blog.csdn.net/running_j/article/details/52091508

http://blog.csdn.net/xiliang_pan/article/details/37693125

http://www.cnblogs.com/phinecos/archive/2009/10/29/1592604.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值