*** glibc gedetecteerd *** ./a.out: double free of corruptie (top): 0x08901d70 *** tijdens een poging om een ​​BST te bevrijden

stemmen
0

Ik besef zijn er een aantal glibc gedetecteerd berichten, maar ik zou zeer dankbaar zijn als je een oplossing voor dit zou kunnen voorstellen:

*** 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: ========

Dit lijkt te gebeuren wanneer ik probeer om te bevrijden van een binaire zoekboom:

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

De structuur typedef'd te BNODEPTR

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

Ik roep de functie van de belangrijkste () met behulp van freetree (root).

De boom lijkt correct worden geïmplementeerd als een inorder traversal produceert een gesorteerde output.

De gehele code is op:

http://pastebin.com/Eieu3xDa en

http://pastebin.com/jtGN6XKj

De vraag is gesteld op 24/10/2011 om 14:07
bron van user
In andere talen...                            


1 antwoorden

stemmen
3

Ik kon ziften door middel van uw broncode, maar zoals ze zeggen, "Voer een man een vis ..."

  1. Compileren code met debugging symbolen (doorgeven -gaan de compiler). Als u dit doet, kunt u een functie naam te krijgen in plaats van ./a.out[0x8048998]in de backtrace.

  2. Run je code Valgrind's memcheck gereedschap (de standaard tool). Dit kan je een veel beter idee over waar de fout is te geven. Je kunt gewoon installeren Valgrind en uitvoeren valgrind ./a.outvoor starters.

In het bijzonder, ik denk dat de hele binaire boom is een rode haring. Er is nog een probleem in het programma ergens anders. Vanuit de backtrace, kan ik zien dat (1) de foutmelding wordt niet geactiveerd in freetreeen (2) u draden, die gemakkelijk kunnen worden misbruikt.

antwoordde op 24/10/2011 om 14:10
bron van user

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