*** *** glibc oppdaget ./a.out: double fri eller fordervelse (øverst): 0x08901d70 *** under forsøket på å frigjøre en BST

stemmer
0

Jeg skjønner det er noen glibc oppdaget innlegg, men jeg ville være veldig takknemlig om du kunne foreslå en løsning på dette:

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

Dette synes å skje når jeg prøver å frigjøre et binært søketre:

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

Strukturen er typedef'd til BNODEPTR

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

Jeg kaller funksjonen fra main () ved hjelp freetree (root).

Treet ser ut til å være riktig implementert som en inorder traversering gir en sortert utgang.

Hele kode er på:

http://pastebin.com/Eieu3xDa og

http://pastebin.com/jtGN6XKj

Publisert på 24/10/2011 klokken 13:07
kilden bruker
På andre språk...                            


1 svar

stemmer
3

Jeg kunne sile gjennom kildekoden, men som de sier, "Feed en mann en fisk ..."

  1. Kompilere koden med debugging symboler (pass -gtil kompilatoren). Hvis du gjør dette, kan du få en funksjon navn i stedet for ./a.out[0x8048998]i tilbakesporing.

  2. Kjør kode med Valgrind er memcheck verktøy (standardverktøyet). Dette kan gi deg en mye bedre anelse om hvor feilen er. Du kan bare installere Valgrind og kjøre valgrind ./a.outfor startere.

Spesielt tror jeg hele binære treet er en rød sild. Det er et annet problem i programmet et annet sted. Fra tilbakesporing, kan jeg se at (1) feilmeldingen utløses ikke i freetreeog (2) du bruker tråder, som er lett misbrukes.

Svarte 24/10/2011 kl. 13:10
kilden bruker

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