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

han*_*nno 20 c++ memory free

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

代码随错误而随机崩溃

*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 ***
Run Code Online (Sandbox Code Playgroud)

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

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

War*_*ung 11

尝试在Valgrind下运行您的程序.它可能会指向较早的原因,而gdb仅在已经发生损坏的地方突破.

  • @AmitBhaira:我没有解决它,我认为这里的评论不会引起hanno的注意.我希望hanno只是尝试了我的建议,并且Valgrind向他展示了破坏他的名单的问题.你试过Valgrind吗?这类问题没有一个简单的解决方案.众所周知,记忆腐败问题难以追查,因为它们可能有很多不同的原因,腐败的明显效果可能远远超出原始损害的实际原因. (2认同)