以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  查找vc内存泄漏技巧  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=61080)


--  作者:卷积内核
--  发布时间:4/9/2008 9:58:00 AM

--  查找vc内存泄漏技巧
在写VC的程序经常发现有内存出错的情况,运行结束之后,就会有报告是否内存出现泄漏情况,如下面所示:
Detected memory leaks!
Dumping objects ->
normal block at 0x003CF650, 4 bytes long.
Data: <  < > E8 F6 3C 00
normal block at 0x003CF928, 16 bytes long.
Data: <( < ( <         > 28 F9 3C 00 28 F9 3C 00 CD CD CD CD CD CD CD CD
normal block at 0x003CF8D0, 24 bytes long.
Data: <  <   <   <     > D0 F8 3C 00 D0 F8 3C 00 D0 F8 3C 00 CD CD CD CD
normal block at 0x003CF878, 24 bytes long.
Data: <x < x < x <     > 78 F8 3C 00 78 F8 3C 00 78 F8 3C 00 CD CD CD CD
client block at 0x003C3418, subtype c0, 64 bytes long.
a CDynLinkLibrary object at 3C3418, 64 bytes long
a CDynLinkLibrary object at 3C3418, 64 bytes long
Object dump complete.

像这样情况,其实有还是可以找出来是在那里创建的。不过,并不是报告出来的,都是真实的内存泄漏。要仔细分析,才能作出决定。因此,就需要找到这块内存是在那里分配的。那么有什么办法呢?使用下面的函数:
_CrtSetBreakAlloc(223);
这个函数,就设置了当分配上面223那块内存时,就中断,然后就可以查看调用栈,知道那里出错了。
不过,使用这个来判断,就要仔细地分析了,由于内存的分配是动态的,并不能保证每次分配内存的号码是一样的。


--  作者:kken
--  发布时间:5/22/2008 1:33:00 AM

--  
在写VC的程序经常发现有内存出错的情况,运行结束之后,就会有报告是否内存出现泄漏情况
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
3,407.227ms