登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

being23

写给未来的自己

 
 
 
 
 

日志

 
 
关于我

真正的坚定,就是找到力量去做自己喜欢的事情,并为之努力,这样才会觉得生活是幸福的。

内存泄漏  

2010-11-01 13:22:27|  分类: 研二上 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

之前的日子一直在做一项甚是无聊的事情,将用M语言写成的代码改成C++语言版本的。不可避免的问题便是常常出现内存泄漏,因为动态分配内存无处不在。刚开始的时候,还能一个malloc一个free的仔细检查。直到最近,一个程序折腾了两天没有任何进展,不得不去网上找点资料,功夫不负有心人,最终在MSDN里找到了相关的 —— 内存泄漏检测和隔离

正如资料中提到的, 在程序中包括下面的语句,启用调试堆函数

$16FJZ{]PMNA}QQ2)[]2@IB

 在程序结尾处包含语句_CrtDumpMemoryLeaks();在输出窗口显示内存泄漏信息。

未命名

 按下F5启动调试,在输出窗口得到如下的内存泄漏信息。很奇怪为什么没有显示泄漏内存的文件和行号~所幸的是,通过内存编号还是能够找到的。

MEM1

 

MEM2

从中可以看到,分配的第一块内存编号为497,也就是说分配的这块内存没有被释放。在程序中包含语句_CrtSetBreakAlloc(497);

step3

 这样在调试环境下,当程序分配这块内存的时就会中断,

MQQ8S5A06[S2K0M{BG%I[YC

点击中断按钮,查看调用堆栈,即查看是哪段代码申请分配内存。既然要分配内存,当然有一个分配内存的函数,这是函数就是Memory_Malloc(int M, int N),那么是谁调用了这个函数呢?这就得查看调用堆栈了。从中可以看到是FindMinPoint_F(……)调用了内存分配函数。

8Y0A_YB8C}[6@@URT5RF7(J

双击FindMinPoint_F(……)就可以定位到代码中分配内存的那一行语句。 这下就知道了分配的内存给了F,剩下的工作就是查看程序中是否正确释放了分配给F的内存。

EFFC7IQ)887NZ)DQ$4~9$TF

检查后发现确实没有释放。PS:这里为了说明如何检测,遂将其注释掉了。

~{LC$A25GJ]M~J_8{SDNQZ7

  评论这张
 
阅读(219)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018