什么可能导致“损坏的双链表”错误?

时间:2009-11-30 13:58:17

标签: c++ memory free

我遇到了相当复杂的代码问题。我无法生成一个可以重现错误的简短片段,因此我将尝试用文字解释这个问题。

代码随机崩溃,错误

*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 ***

调试显示它来自代码释放对象的行。对象似乎没有任何问题。它存在,我可以在错误发生时访问它的数据。对象的析构函数是微不足道的,不会做任何事情。

所以,我有点卡住了。在什么样的情况下,你期望“免费”失败?

2 个答案:

答案 0 :(得分:11)

尝试在Valgrind下运行您的程序。它可能会指向一个较早的原因,而gdb只是在已经发生损害的地方突破。

答案 1 :(得分:0)

正如沃伦所说,瓦尔格朗德通常是找到它的最佳方法。双向链表通常是网络或二进制数据处理程序的基础,即在QT QByteArrayQTcpSocket中。今天我有同样的事情,那是因为我通过将对象从映射中删除来使对象无效,但之前已经获得了指向其内部数据的指针。它有时起作用,有时不起作用。系统上的负载越高,崩溃的可能性就越大。