免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: 阿旺
打印 上一主题 下一主题

malloc失败的问题,救命啊! [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-10-23 23:39 |只看该作者

malloc失败的问题,救命啊!

处女贴!

出个主意给你,找到malloc的代码,
自己实现简单的malloc/free,再查错误.

这个是没有办法的办法了,如果这个也出错的话...

论坛徽章:
0
22 [报告]
发表于 2005-10-24 11:07 |只看该作者

malloc失败的问题,救命啊!

u        内存分配未成功,却使用了它。
编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。

u        内存分配虽然成功,但是尚未初始化就引用它。
犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(例如数组)。
内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。

u        内存分配成功并且已经初始化,但操作越过了内存的边界。
例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。

u        忘记了释放内存,造成内存泄露。
含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽。
动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。

u        释放了内存却继续使用它。
有三种情况:
(1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
(2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
(3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。

论坛徽章:
0
23 [报告]
发表于 2005-10-24 12:00 |只看该作者

malloc失败的问题,救命啊!

http://www.macedition.com/bolts/bolts_20021210.php

论坛徽章:
0
24 [报告]
发表于 2005-10-24 12:02 |只看该作者

malloc失败的问题,救命啊!

我看就是瞎猜,而且也不一定真的就是malloc出问题。
如何跟的程序,如果就断定是malloc?
东门之杨 该用户已被删除
25 [报告]
发表于 2005-10-26 16:54 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
26 [报告]
发表于 2005-10-31 13:01 |只看该作者
这么多人给我出主意,谢谢大家了,出差了一段时间,现在才来结贴,在此向大家道个歉。这个问题第二天就找到原因了,是由于数据量发生了变化,我在其他地方使用链表时其中的数组维数小了点,结果导致内存崩溃,结果到程序再次分配内存时出错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP