无效的 fastbin 条目(免费)

新手上路,请多包涵

我试图找出原因:

 *** 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 许可协议

阅读 1.2k
2 个回答

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

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

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

该问题从未重现。

原文由 idefixs 发布,翻译遵循 CC BY-SA 3.0 许可协议


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

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

 rpm -qa | grep glibc

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


原文由 Bhupinder 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题