无效的快速入境(免费)

ide*_*ixs 5 c++ glibc

我试图找到原因:

*** glibc detected *** ...: invalid fastbin entry (free): 0x00007fc384ced120 ***
Run Code Online (Sandbox Code Playgroud)

该程序转储了核心,所以我能够将其追溯到一个非常简单的类的析构函数,类似于:

class foo : public foo_base
{
    ...
    ...
    std::vector<boost::weak_ptr<bar> > vec;
}
Run Code Online (Sandbox Code Playgroud)

析构函数是虚拟的foo_base,未实现foo

向量vec仅在构造函数中指定,之后不进行修改.

glibc错误提到的地址与 vec._M_impl._M_start

  • 我在哪里可以开始寻找原因?

  • 知道什么是fastbin,它怎么会无效?

  • 这可能是一个双重自由的情况,还是glibc肯定会double free在这种情况下提出?

ide*_*ixs 1

“回答”我自己的问题:

我能够排除双重释放的情况,因为事实证明所有foo实例总是(正确地)保存在智能指针中。

最近发现了一个内存损坏错误。不可能确认这就是最初问题的原因,但这似乎是合理的。

该问题从未重现。