关于new/delete、malloc/free的内存泄漏检测

情况一 new/delete 内存泄漏

1、在MFC中可以每一个cpp文件的头部添加以下一段宏来检测new申请而没用free释放的内存泄漏

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

2、在非MFC项目中使用

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

需要添加一些设置:

(1)添加头文件#include <afx.h>

(2)对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享 DLL 中使用 MFC”

缺点:链接了MFC库也使得生成的可执行文件大了许多,这个没什么负面影响。最可怕的是如果仅为了使用内存诊断机制,而带来了链接库冲突的麻烦。

备注:关于VS2008等VS平台,在项目属性中有一项MFC的使用,有三种设置:

  1.使用标准Windows库(只使用windows的sdk,不使用mfc框架库)

  2.在共享DLL中使用MFC (打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件。

  如果程序本来是第二种方式,发给同事,在同事机器上运行时,可能会出现错误:“无法启动程序……,由于应用程序配置不正确,未能启动此应用程序)。

  3.在静态库中使用MFC (将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行)

 

 

情况二 malloc/free 内存泄漏

1、_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

添加头文件 #include <crtdbg.h>

缺点:缺少了文件名和行号。对于一个比较大的程序,没有这些信息,解决问题将变得十分困难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值