日期:2014-05-16  浏览次数:20872 次

unix下c程序偶尔分配内存失败是怎么回事
unix下c程序,加载了一个接口编码的动态库,在程序运行一段时间后,就出现动态库接口编码函数报错( 接口要命的是接口不打log)。而且夹杂着我们自己内部的内存数据库malloc就失败。但是程序还正常处理业务,处理完了调接口编码函数就报错。

但是以前这个接口函数一直用了2、3年了,出问题的可能性比较小。高手分析一下,这个跟主机内存有关系吗,是不是内存泄露。

------解决方案--------------------
接口函数都用了2、3年了,说明函数本身应该是OK的,不会有内存泄漏;
很有可能的原因是在这个接口函数调用之前的代码中出现了内存越界操作,而导致malloc函数需要使用到的一些信息被破坏;
------解决方案--------------------
内存碎片多了
------解决方案--------------------
还是bug吧,除非硬件坏了.
------解决方案--------------------
malloc 返回的错误码
valgrind 内存检测
------解决方案--------------------
引用:
我们这个程序跑了2、3年了,就是前两天加了一点业务,然后上线后就这问题,刚开始写的有点问题,我们的内存库bug,导致分配内存太多,1、2个小时就core dump了,后来问题已经改了,而且没有操作指针,还是出现这个问题,但是跑1、2天就所有接口函数编码失败,不core dump一直跑,就是所有到接口函数编码都失败。夹杂内存库malloc失败,但是不是所有都malloc失败……


跟进你的描述 很可能就是新业务导致了大量的内存碎片,检查下代码看看内存分配是否需要个管理器