hur.cn - 华软网

 热门搜索

内存泄漏问题

  作者:未知    来源:网络    更新时间:2010/7/4
最近在查找代码中的内存泄漏问题,看了一些帖子,说举行以下操作可显示泄漏处:
在起头处按照顺序定义:
#define _CRTDBG_MAP_ALLOC
#include<stdlib.h>
#include<crtdbg.h>

在检测处写入:
_CrtDumpMemoryLeaks();

按下F5即可在debug窗口看到内存是否泄漏的信息。
有一个例子,说是能够显示出:
Dumping objects ->

C:\Temp\memleak\memleak.cpp(15) : {45} normal block at 0x00441BA0, 2 bytes long.

Data: <AB> 41 42

c:\program files\microsoft visual studio\vc98\include\crtdbg.h(552) : {44} normal 
block at 0x00441BD0, 33 bytes long.

Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD

c:\program files\microsoft visual studio\vc98\include\crtdbg.h(552) : {43} normal 
block at 0x00441C20, 40 bytes long.

Data: < C > 08 02 43 00 16 00 00 00 00 00 00 00 00 00 00 00

Object dump complete.

但我自己运行了一下,上述代码中红字部份没有显示出来啊,接下来又如何找到泄漏的地方呢?
---华软 网友回答---
你没有“C:\Temp\memleak\memleak.cpp”这个资料,如何显示?

---华软网友回复---
mark
---华软网友回复---
哦,我的意思不是原原本本显示那条语句,按理来说,应该显示所建工程代码中内存泄漏的位置,但没有显示。
而且我直接下了源工程资料夹,那个作者的源资料就是memleak.cpp,只是路径不同而已。
---华软网友回复---
这个提醒没啥作用,仔细检查下自己的代码,看看new和delete是否配对。

或用BoundChecker跑下
---华软网友回复---
另有一个问题:
当程序没有出现new和delete不可对时,能够以为主函数中没有内存泄漏,但依然出现报错:

c:\program files\microsoft visual studio\vc98\include\crtdbg.h(552) : {44} normal  
block at 0x00441BD0, 33 bytes long.

Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD

c:\program files\microsoft visual studio\vc98\include\crtdbg.h(552) : {43} normal  
block at 0x00441C20, 40 bytes long.

Data: < C > 08 02 43 00 16 00 00 00 00 00 00 00 00 00 00 00

与之前的相比已经没有了这部份报错:
C:\Temp\memleak\memleak.cpp(15) : {45} normal block at 0x00441BA0, 2 bytes long.

Data: <AB> 41 42

说明是delete成功的,上两条报错是什么原因致使的?

---华软网友回复---
建议LZ养成良好的编程习气,NEW完之后,记得DELETE
---华软网友回复---
有可能不是报错。就是记录一下  那里有销毁内存 或 增加内存
---华软网友回复---
引用 6 楼 s373785346 的回复:
建议LZ养成良好的编程习气,NEW完之后,记得DELETE

不能不说,有时候内存泄漏跟new和delete没有关系;我的意思是说出现问题其实不能说就是楼主运用new和delete出的问题
---华软网友回复---
没代码,是看不出来的。
今天早上一个程序,由于线程没有退出,致使内存泄露。现在解决了。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。