CRT调试内存泄露

使用VS自带的模块CRT检测内存泄露,方法:

在cpp文件中,包含:

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

为了定位cpp中泄露的具体位置,做如下定义:

#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif

///

在程序结束的位置定义_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

Debug版本的 CRT定义了一套调试版本的内存分配函数(如_malloc_dbg)。当你包含了CRTDBG.h后,如果当前是Debug工程,十有八九会有_DEBUG宏,这时,malloc函数会被被映射为_malloc_dbg。

当如果是Release版本,它什么都不做。这样以来,如果是Debug版本,我们调用的malloc或者new,其实最终调用的都是_malloc_dbg。而_malloc_dbg会分配更多的内存,用来存储调试信息,用来跟踪内存分配和释放是否对应。

当我们在Debug版本中调用malloc时候,其调用的是_malloc_dbg,
只在Debug版本中有效(定义了_DEBUG,链接到Debug CRT库)。Rlease版本使用正常的malloc和free。

在你的程序即将退出的时候,调用此函数,就能打印内存泄露信息。但我们的代码可能很复杂,有多个结束点。定义如下函数

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );


如果要检测某代码有否泄露,必须将每个cpp文件都增加以上的语句包含!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值