无效的fastbin条目(免费)

invalid fastbin entry (free)

本文关键字:免费 条目 fastbin 无效      更新时间:2023-10-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 相同

  • 我从哪里开始寻找原因?

  • 知道什么是快速垃圾箱,它怎么可能是无效的?

  • 这会是一个双自由的情况吗?或者glibc在这种情况下肯定会提出double free吗?


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

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

rpm -qa | grep glibc

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


回答我自己的问题:

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

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

这个问题从未重现。

对我来说,这个错误来自c++的pytorch torch api

我对这个话题还很着迷,但当出现错误时

torch::Tensor var = torch::zeros({1, 1}, torch::kFloat32);
torch::Tensor foo = torch::full({1, 1}, val, torch::kFloat32);

它消失时:

torch::Tensor var = torch::zeros({1, 1}, torch::kFloat64);
torch::Tensor foo = torch::full({1, 1}, val, torch::kFloat64);