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

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

  1. 疯狂-的-蜗牛:https://blog..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,可以使用

经验分享 程序员 微信小程序 职场和发展