段错误:smallbin double linked list corrupted

昨天一个原本运行良好的工程发生了下述错误:
*** glibc detected *** corrupted double-linked list: 0x00000000005ab150 ***
进程崩溃,显示底层发送了一个段错误信号。

/

遂上网搜索,引用一下别人的文章:

*** glibc detected *** free(): invalid pointer:
*** glibc detected *** malloc(): memory corruption:
*** glibc detected *** double free or corruption (out): 0x00000000005c18a0 ***
*** glibc detected *** corrupted double-linked list: 0x00000000005ab150 ***

内存问题始终是c++程序员需要去面对的问题,这也是c++语言的门槛较高的原因之一。通常我们会犯的内存问题大概有以下几种:
1.内存重复释放,出现double free时,通常是由于这种情况所致。
2.内存泄露,分配的内存忘了释放。
3.内存越界使用,使用了不该使用的内存。
4.使用了无效指针。
5.空指针,对一个空指针进行操作。

/
我检查了工程大多数new delete以及 strcat,vsprintf, memcpy, memset, memmove等一些内存操作函数的地方,都没有发现问题。


不断调试发现每次发生问题的地方还不太一样。

但大多(不是全部)似乎和一个类(姑且称作类A)有关,理由是:

1) 我发现这个类A没有正常delete,于是我加了一句delete:

但,居然在delete类A的时候发生该异常。

2) 于是我把new A的语句提前,放在另一个类B构造函数里,然后仅在类B的析构函数里delete。

但,发生该异常的错误居然提前到类B构造函数之后的另一个类C的new的地方。

3)其他莫名其妙出错的地方都发生在new类A的之后。


因为这个类A是属于一个动态库里的,我第一时间怀疑是不是头文件和库文件不一致导致的。因为这个类A在其他工程里运行良好。

于是从其他工程里复制其头文件,覆盖本工程。

重新编译工程,运行,再也不出错了。


因为发生这个错误情况,网上大多把错误原因归咎于内存泄露,所以我觉得有必要记录一下我这个解决办法。


        



  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值