博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于new/delete、malloc/free的内存泄漏检测
阅读量:6707 次
发布时间:2019-06-25

本文共 904 字,大约阅读时间需要 3 分钟。

情况一 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>

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

转载地址:http://hlilo.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
puppet自动化运维之函数
查看>>
如何优雅地过滤敏感词
查看>>
我的Python成长之路—04
查看>>
Linux 大页内存的使用
查看>>
关于页面里插flash
查看>>
我的友情链接
查看>>
MySQL 修改索引名称
查看>>
RabbitMQ基础概念详细介绍
查看>>
《设计模式那点事》 - 书摘精要
查看>>
Yii-数据模型 自定义数据,数据库插入,修改方法
查看>>
献给初学者:谈谈如何学习Linux操作系统
查看>>
树莓派3学习笔记(6):常用的Linux命令
查看>>
Active Directory系列之用Veritas创建MSI文件
查看>>
"EXT QPI LINK 2" error的解决方法 IBM System x3850 X5shangxl@dc
查看>>
将表转javabean(基于mysql)
查看>>
IDEA下载激活配置
查看>>
vim配置文件
查看>>
Vuex从入门到精通(一)
查看>>
JAVA中int、String的类型转换
查看>>