2013-07-02 6 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

  • मैं कहां से कारण के लिए खोज शुरू कर सकता है के समान है?

  • यह जानना कि एक फास्टबिन क्या है, यह अमान्य कैसे हो सकता है?

  • क्या यह एक डबल फ्री स्थिति हो सकता है, या इस मामले में ग्लिब निश्चित रूप से 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 या बाद में प्रत्यय नहीं है, तो आपका सर्वर इस मुद्दे से प्रभावित हो सकता है।


संबंधित मुद्दे