无效的快速入境(免费)

时间:2013-07-02 10:44:41

标签: c++ glibc

我试图找到原因:

*** 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

2 个答案:

答案 0 :(得分:3)

这可能是由于glibc中的错误造成的。 RedHat Advisories提供了更多详细信息: https://rhn.redhat.com/errata/RHBA-2014-0480.html

确定您是否受此错误的影响:

rpm -qa | grep glibc

如果您的glibc版本为2.12并且没有.149或更高版本的后缀,那么您的服务器可能会受到此问题的影响。

答案 1 :(得分:1)

“回答”我自己的问题:

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

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

问题从未复制过。