内存泄露检查

向往人间真爱

向往人间真爱

2016-02-19 12:15

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

 

在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分配的内存则仅仅是显示出内存泄露的信息而无法定位分配内存的程序位置。

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

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

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

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

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

 

展开更多 50%)
分享

猜你喜欢

内存泄露检查

编程语言 网络编程
内存泄露检查

VC内存泄露检查工具:VisualLeakDetector

服务器
VC内存泄露检查工具:VisualLeakDetector

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java内存泄露问题分析

Java JAVA基础
Java内存泄露问题分析

详细介绍Java内存泄露原因

编程语言 网络编程
详细介绍Java内存泄露原因

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

权威JavaScript 中的内存泄露模式

Web开发
权威JavaScript 中的内存泄露模式

在VC++中启用内存泄露检测

编程语言 网络编程
在VC++中启用内存泄露检测

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

switch语句的“不准遍历”

switch语句的“不准遍历”

在PHP的图形函数中显示汉字

在PHP的图形函数中显示汉字
下拉加载更多内容 ↓