C++ fastbin条目无效(免费)

C++ fastbin条目无效(免费),c++,glibc,C++,Glibc,我正试图找出以下原因: *** glibc detected *** ...: invalid fastbin entry (free): 0x00007fc384ced120 *** 程序转储了内核,因此我能够将其追溯到一个非常简单的类的析构函数,类似于: class foo : public foo_base { ... ... std::vector<boost::weak_ptr<bar> > vec; } class foo:publ

我正试图找出以下原因:

*** glibc detected *** ...: invalid fastbin entry (free): 0x00007fc384ced120 ***
程序转储了内核,因此我能够将其追溯到一个非常简单的类的析构函数,类似于:

class foo : public foo_base
{
    ...
    ...
    std::vector<boost::weak_ptr<bar> > vec;
}
class foo:public foo\u base
{
...
...
std::vec;
}
析构函数在
foo_base
中是虚拟的,在
foo

向量
vec
仅在构造函数中分配给,此后不进行修改

glibc错误提到的地址与vec相同。\u M_impl.\u M_start

  • 我从哪里开始寻找原因

  • 知道什么是fastbin,它怎么可能无效

  • 这是一种双重自由的情况,还是glibc在这种情况下肯定会提出双重自由

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

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

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

问题从未重现。


这可能是由于
glibc
中的错误造成的。 RedHat咨询提供了更多详细信息:

要确定您是否受到此错误的影响,请执行以下操作:

rpm -qa | grep glibc
如果您的
glibc
版本为
2.12
,并且没有
.149
或更高版本的后缀,则您的服务器可能会受到此问题的影响



您要么双倍释放
foo
,要么存储在某个分配的内存之外(从而写入用于“管理”分配的内存)。