C++ 使用VS进行内存泄漏检查

14 篇文章 0 订阅

这是在win10 vs2012的环境下进行的实验。主要参考的博客和回答有:

  1. 疯狂-的-蜗牛:https://blog.csdn.net/mfcing/article/details/42673393
  2. vczh的回答:https://www.zhihu.com/question/63946754

首先在代码顶部加上如下语句:

#ifdef VCZH_CHECK_MEMORY_LEAKS
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define VCZH_CHECK_MEMORY_LEAKS_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new VCZH_CHECK_MEMORY_LEAKS_NEW
#endif

在main函数最后一行,加入:

_CrtDumpMemoryLeaks()

紧接着,使用VS的调试功能

这里使用疯狂-的-蜗牛的例子:
如果出现内存泄漏现象,在VS输出框会出现类似提示:

Detected memory leaks!
Dumping objects ->
{453} normal block at 0x02432CA8, 868 bytes long.
 Data: <404303374       > 34 30 34 33 30 33 33 37 34 00 00 00 00 00 00 00 
{447} normal block at 0x024328B0, 868 bytes long.
 Data: <404303374       > 34 30 34 33 30 33 33 37 34 00 00 00 00 00 00 00 

取其中一条详细说明:{453} normal block at 0x02432CA8, 868 bytes long.

被{}包围的453就是我们需要的内存泄漏定位值,868 bytes long就是说这个地方有868比特内存没有释放。

接下来,定位代码位置:

在main函数第一行加上:

_CrtSetBreakAlloc(453);

意思就是在申请453这块内存的位置中断。然后调试程序,程序中断了。查看调用堆栈。
在这里插入图片描述
双击我们的代码调用的最后一个函数,找到问题代码,进行修改。

对于linux,可以使用 valgrind 工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值