2013-07-02 66 views
5

我試圖找到病因:無效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在這種情況下?

+2

您要麼釋放你的'foo',要麼在某些分配的內存之外存儲(因此寫入用於「管理」分配的內存)。 –

回答

1

要「答案」我自己的問題:

我能排除雙重釋放的情況下,因爲事實證明,所有foo情況下總是(正確地)保存在智能指針。

最近發現了內存損壞問題。無法證實這是造成原始問題的原因,但似乎是合理的。

該問題從未被轉載。

2

這可能是由於glibc中的一個錯誤引起的。 RedHat的公告提供更多詳細信息: https://rhn.redhat.com/errata/RHBA-2014-0480.html

要確定,如果你是此問題的影響:

rpm -qa | grep glibc 

如果你的的glibc版本是2.12,沒有一個.149或更高版本的後綴,然後您的服務器可能會受到此問題的影響。