我试图找出原因:
*** glibc detected *** ...: invalid fastbin entry (free): 0x00007fc384ced120 ***
该程序转储了核心,因此我能够将其追溯到一个非常简单的类的析构函数,类似于:
class foo : public foo_base
{
...
...
std::vector<boost::weak_ptr<bar> > vec;
}
析构函数在 --- 中是虚拟的,在 foo_base
foo
没有实现
向量 vec
仅在构造函数中赋值,之后不再修改。
glibc错误提到的地址与 vec._M_impl._M_start
相同
我可以从哪里开始寻找原因?
知道fastbin是什么,怎么会失效呢?
这可能是双重释放的情况,还是 glibc 在这种情况下肯定会引发
double free
?
原文由 idefixs 发布,翻译遵循 CC BY-SA 4.0 许可协议
要“回答”我自己的问题:
我能够排除双重释放的情况,因为事实证明所有
foo
实例总是(正确地)保存在智能指针中。最近发现了一个内存损坏错误。无法确认这是最初问题的原因,但似乎是合理的。
该问题从未重现。