【问题标题】:invalid fastbin entry (free)无效的 fastbin 条目(免费)
【发布时间】: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,要么存储在一些分配的内存之外(因此写入用于“管理”分配的内存)。

标签: c++ glibc


【解决方案1】:

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

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

rpm -qa | grep glibc

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


【讨论】:

    【解决方案2】:

    要“回答”我自己的问题:

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

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

    问题从未重现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多