5

私は次の原因を見つけようとしています:

*** 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 とは何かを知っているのに、なぜそれが無効になるのでしょうか?

  • double freeこれはダブル フリーの状況でしょうか? それとも、この場合、glibc は間違いなく aを発生させますか?

4

2 に答える 2

3

これは のバグが原因である可能性がありますglibc。詳細については、RedHat アドバイザリー ( https://rhn.redhat.com/errata/RHBA-2014-0480.html)を参照してください。

このバグの影響を受けているかどうかを確認するには:

rpm -qa | grep glibc

のバージョンが でglibcあり、またはそれ以降のサフィックス2.12がない場合、サーバーがこの問題の影響を受ける可能性があります。.149


于 2016-05-31T11:46:36.893 に答える
1

自分の質問に「答える」には:

fooすべてのインスタンスが常に (正しく) スマート ポインターに保持されていることが判明したため、ダブル フリーの状況を除外することができました。

最近、メモリ破損のバグが発見されました。これが元の問題の原因であったかどうかを確認することは不可能ですが、妥当と思われます。

問題は再現されませんでした。

于 2014-02-05T18:58:15.730 に答える