内存泄露检查

2016-02-19 12:15 7 1 收藏

图老师小编精心整理的内存泄露检查希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 编程语言 】

 

在VC中提供内存检查的机制是跟踪new操作,也就是说所有的new操作都会被记录,如果通过new操作所分配的内存未被正常delete将会在程序退出时在调试窗口中显示出具体的内存泄露信息。

同样通过malloc分配的内存也会被跟踪,但是在显示时就不会知道实在程序中何处进行了malloc操作。先看一下下面的例子:

void _tmain()
{ ...
char *pszNew=(char*)malloc(200);
char *pszNew2=new char[100];
CString *pszNew3=new CString("test");
...
}

//通过调试方式运行后并退出,可以看到调试信息中关于内存泄露的信息如下:

Detected memory leaks!
Dumping objects -
strcore.cpp(118) : {37} normal block at 0x007702E0, 17 bytes long.
Data: test 01 00 00 00 04 00 00 00 04 00 00 00 74 65 73 74
G:emp2sam_sp_33sam_sp_33.cpp(42) : {36} normal block at 0x00770520, 4 bytes long.
Data: w EC 02 77 00
//对于CString *pszNew3=new CString("test");产生的信息
G:emp2sam_sp_33sam_sp_33.cpp(41) : {35} normal block at 0x00770320, 100 bytes long.
Data: CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
//对于char *pszNew2=new char[100];产生的信息
{34} normal block at 0x007703B0, 200 bytes long.
Data: CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
//对于char *pszNew=(char*)malloc(200);产生的信息
Object dump complete.

可以看到通过new分配的内存在显示信息时会报告出在那一个文件的那一行进行的new操作,而通过malloc分配的内存则仅仅是显示出内存泄露的信息而无法定位分配内存的程序位置。

此外如果需要在文件头部定义DEBUG_NEW宏才可以正确的跟踪new操作。具体代码如下:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

由于对new操作的跟踪只需要在调试版本中出现所以使用了条件编译。

我们可以看到VC所提供的检查内存泄露的方式是非常易于使用的,我们在开发程序时一定要注意内存的分配问题,特别是对于一些长时间运行的程序。
 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

 

来源:https://www.tulaoshi.com/n/20160219/1600336.html

延伸阅读
编译:残 今天在网上看到Windows Vista Build5231也已经泄露了。消息称Windows Vista Build 5237也已经开发出来。还有消息说Windows Vista Build 5245也在酝酿之中。先不管别的,来看看新泄露的5231给我们带来了什么。 据消息说,Vista Build5231有以下更新: ·系统信息页面有所改变 ·声音按钮问题已经解决 ·包含了6800个矢量显示驱动...
标签: 问题肌肤
颈纹形成的原因一:人体自然衰老 女人进入一定年龄阶段后,肌肤开始进入衰老进程,这个时候无论是脸部还是其他部位的肌肤,都会随着时间的推移而出现皱纹衰老型肌肤问题,颈部更是如此。在加上颈部运动频繁,肌肤更加容易出现颈纹,非常明显,而且很难消除,成为出卖年龄的肌肤问题之一。 颈纹形成的原因二:紫外线刺激 ...
标签: 办公软件
在打开的Word文档主界面中,单击“文件→属性”,就可以打开文档的“属性”窗口,一般情况,在此窗口中的“摘要”选项卡中显示了与作者有关的一些信息,如作者,单位等。某些情况下,可能你不想让这些信息被别人看到,那该如何设置呢?下面笔者就以Word 2002为例来介绍设置方法,在其他版本的Word中设置方法大同小异,朋友们可以参照本文自行...
标签: 孕期
你比别人多皱纹的原因在哪 .hzh {display: none; } 皱纹 和同龄人比起来,你看上去要大3~5岁,不是因为肥胖或者脱发,而是因为皱纹,它不是那种浅碎的小细纹,而是深刻的嵌入肌肉的深纹。 ●原因:皱纹是紧张造就的沟壑。紧张消耗了许多生命活动所需的营养,使细胞活力和新陈代谢速度...
具有动态的分配和释放内存的能力是C/C++程序语言的重要特色之一。VisualC++ debugger和CRT库提供了一系列有效的检测和鉴定内存泄漏的工具。 设置内存泄漏检测 检测内存泄漏的基本工具是调试器和CRT调试堆函数。为了使用调试堆函数,在你的程序中你必须含有下面的说明: #define _CRTDBG_MAP_ALLOC #includestdlib.h #includecrtdbg.h 必...

经验教程

977

收藏

77
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部