【发布时间】:2013-06-29 16:47:16
【问题描述】:
我正在寻找原因:
*** 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?
【问题讨论】:
-
您要么双重释放您的
foo,要么存储在一些分配的内存之外(因此写入用于“管理”分配的内存)。