*** glibc का पता चला *** ./a.out: डबल मुक्त या भ्रष्टाचार (ऊपर): 0x08901d70 *** एक BST को मुक्त करने का प्रयास करते समय

वोट
0

मुझे पता है कुछ पदों का पता चला glibc देखते हैं, लेकिन अगर आप इस के लिए एक समाधान का सुझाव सकता है मैं बहुत आभारी होंगे:

*** glibc detected *** ./a.out: double free or corruption (top): 0x08901d70 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x17c501]
/lib/libc.so.6(+0x6dd70)[0x17dd70]
/lib/libc.so.6(cfree+0x6d)[0x180e5d]
/lib/libc.so.6(fclose+0x14a)[0x16c81a]
./a.out[0x8048998]
/lib/libpthread.so.0(+0x5cc9)[0xc1fcc9]
/lib/libc.so.6(clone+0x5e)[0x1e069e]
======= Memory map: ========

यह तब हो जब मैं एक द्विआधारी खोज वृक्ष मुक्त करने का प्रयास लगता है:

void freetree(BNODEPTR *root)
{
        if(root!=NULL)
        {
                freetree(root->left);
                freetree(root->right);
                free(root);
        }
}  

संरचना BNODEPTR को typedef'd है

struct bnode{
        int info;
        int count;
        struct bnode* left;
        struct bnode* right;
};

मैं मुख्य () का उपयोग कर freetree (रूट) से समारोह बोल रहा हूँ।

पेड़ को सही ढंग से लागू किया जाना के रूप में एक inorder ट्रावर्सल किसी क्रमित उत्पादन का उत्पादन लगता है।

पूरे कोड पर है:

http://pastebin.com/Eieu3xDa और

http://pastebin.com/jtGN6XKj

24/10/2011 को 14:07
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
3

मैं अपने स्रोत कोड में छान-बीन कर सकता है, लेकिन जैसा कि वे कहते हैं, "एक आदमी एक मछली फ़ीड ..."

  1. प्रतीकों डिबगिंग के साथ अपने कोड संकलित करें (पारित -gसंकलक के लिए)। यदि आप ऐसा करते हैं, तो आप के बजाय एक समारोह का नाम प्राप्त कर सकते हैं ./a.out[0x8048998]पश्व-अनुरेखन में।

  2. वेलग्रिंड के साथ अपने कोड चलाने Memcheck उपकरण (डिफ़ॉल्ट उपकरण)। यह आपको जहां त्रुटि है के बारे में एक बहुत अच्छा संकेत दे सकता है। तुम बस वेलग्रिंड स्थापित करने और चला सकते हैं valgrind ./a.outशुरुआत के लिए।

विशेष रूप से, मुझे लगता है कि पूरे द्विआधारी पेड़ एक रेड हेरिंग है। कहीं और अपने कार्यक्रम में एक और समस्या है। पश्व-अनुरेखन से, मैं देख सकते हैं कि (1) त्रुटि संदेश में शुरू हो रहा नहीं है freetreeऔर (2) आप धागे, जो आसानी से दुरुपयोग किया जाता का उपयोग कर रहे हैं।

24/10/2011 को 14:10
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more