现在的位置: 首页 > 综合 > 正文

Linux 下的各种内存错误

2013年10月17日 ⁄ 综合 ⁄ 共 734字 ⁄ 字号 评论关闭

这两天在写一个多线程的代码,并行求最大独立子集,由于一个欠考虑的循环赋值导致了coredump,调试过程太曲折了。。为了记下这个教训,整理点内存错误的一些原因。


free(): invalid next size (fast): 0x095f6070

是由于对指针0x095f6070指向的空间,进行写操作超过了他实际申请的大小

   *** glibc detected *** free(): invalid pointer:
当一个指针或者该指针所指向的内存单元成为无效单元,或者内存中分配的数据结构被破坏时,就会造成内存错误。指针未被初始化,指针被初始化为一个无效地址,指针被不小心错误地修改,在与指针相关联的内存区域被释放后使用该指针(这种指针被称为虚悬(dangling)指针),这些都会使指针变为无效指针。当通过一个错误指针或者虚悬指针对内存进行写入,或者将指针强制转换为不匹配的数据结构,又或者是写数据越界,内存自身也会遭到破坏。删除未被初始化的指针、删除非堆指针、多次删除同一指针或者覆盖一个指针的内部数据结构,都会造成内存分配系统错误。

   *** glibc detected *** malloc(): memory corruption:

一般是由于对内存的写越界,从而导致内存的管理信息遭到破坏。


   *** glibc detected *** double free or corruption (out): 0x00000000005c18a0 ***

double free 就不解释了,corruption错误同上,主要也是由于内存的越界写。

   *** glibc detected *** corrupted double-linked list: 0x00000000005ab150 ***  

待续。。希望大家给建议

抱歉!评论已关闭.