网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> VC编程 >> 文章正文
  也谈 释放动态分配的内存的时候出现的异常            【字体:
也谈 释放动态分配的内存的时候出现的异常
作者:佚名    文章来源:不详    点击数:    更新时间:2007-9-12    

日前,在一段代码中调试中,发现对动态分配的内存进行释放时报错,

DAMAGE: after Normal block #293at 0x002b23ed

代码大体如下:

…………………

         {

                   iarry=(MOBILE_INDEX**)malloc(days*sizeof(MOBILE_INDEX*));

                   isize=(unsigned long*)malloc(days*sizeof(unsigned long));

                   for(int i=0;i<=days;i++)

                   {

                            ……………………….

                            iarry[i]=LoadSuccessMobileIndex(iarry[i],&isize[i],tday,path);

                            size++;

                   }

         }

         FreeArray();

}

void CManMobileDlg::FreeArray()

{

         if(size>0)

         {

                   for(int i=0;i<size;i++)

                   {

                            //if(isize[i]>0)

                                     FreeMobileIndex(iarry[i]);

                            //free(iarry[i]);

                   }

                   free(iarry);

                   free(isize);                  

                   size=0;

         }

}      

大体意思是:先为指针数组动态分配一段空间,然后在循环内为每个指针数组元素分配内存空间,然后在操作完成后,通过自定义函数释放这些内存空间。
正在装载数据……

 

跟了好几次,百思不得其解,就GOOGLE一下,在VCKBASE.COM 找到了一篇文章,http://www.vckbase.com/document/finddoc.asp?keyword=%C9%FA%CB%C0%BD%AE%BD%E7 ,大受起码,也咬牙跟进了free函数内部。

的确,内存分配完毕后,内存分配机制会在分配的内存空间后部添加四个FD字节,以表示以上为用户的内存区域。

仔细比对了自己的内存区域,发现在四个FD字节之前,自己分配的内存空间竟然没有对齐,导致了有一个FD字节进入了用户内存区域,只剩余3FD字节来表示结束。所以,必然导致了free函数内CheckBytes函数检查分配的用户内存空间不正常,导致释放内存失败。

于是,在动态分配内存的时候,多分配了一个类型空间

iarry=(MOBILE_INDEX**)malloc((days+1)*sizeof(MOBILE_INDEX*));

isize=(unsigned long*)malloc((days+1)*sizeof(unsigned long));

试验后,运行正常,内存可以被正确释放,无泄漏。

 


本文来源:http://blog.csdn.net/jackyvan/archive/2007/08/23/1756389.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     directx 图形接口指南(…
     win2k下的api函数的拦截
     用crypto  api  实现公钥…
     根据别人的md5源码封装的…
     vc中使用gdi+合并jpg图片
     document/view的交互 --…
     windows下的函数hook技术
     windows api函数大全一
     用vc 6.0实现串行通信的…
     vc++技术内幕(第四版)…
  • 多态性之动态联编 虚函数

  • VC++ MFC DLL动态链接库编写…

  • 把游戏变成com组件,实现框架…

  • DELPHI 中如何使用动态数组

  • Delphi之动态数组(整理)

  • web页面上 菜单弹出窗口 动态…

  • 使用技巧:JSP中如何发送一个…

  • 如何在JSP中发送一个动态图像

  • 动态JSP页生成静态HTML

  • 动态script标签解决跨域问题…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David