*** glibc észlelt *** ./a.out: kétágyas szabad vagy korrupció (felső): 0x08901d70 ***, miközben megpróbálta kiszabadítani a BST

szavazat
0

Én észre néhány „glibc detected” hozzászólás, de én nagyon hálás lenne, ha tudna olyan megoldás erre:

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

Úgy tűnik, ez történik akkor, amikor azt próbálja meg kiszabadítani a bináris keresési fa:

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

A szerkezet typedef'd hogy BNODEPTR

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

Hívom a funkciót main () segítségével freetree (root).

A fa úgy tűnik, hogy végre rendesen, mint egy inorder bejárása termel SZORTÍROZÁS.

Az egész kód itt:

http://pastebin.com/Eieu3xDa és

http://pastebin.com/jtGN6XKj

A kérdést 24/10/2011 14:07
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
3

Tudtam szitál a forráskódot, de mint mondják, „takarmány egy embernek egy halat ...”

  1. Fordítsd meg a kódot a hibakereső szimbólumokkal (pass -g, hogy a fordító). Ha ezt megteszi, akkor kap egy függvény neve helyett ./a.out[0x8048998]a hívási láncot.

  2. Futtatni a kódot Valgrid a memcheck eszköz (az alapértelmezett eszköz). Ez talán kapsz egy sokkal jobb nyom, ahol a hiba van. Akkor csak telepíteni és futtatni Valgrid valgrind ./a.outkezdetnek.

Különösen azt hiszem, az egész bináris fa egy vörös hering. Van egy másik probléma a programban valahol máshol. A backtrace, azt láthatjuk, hogy (1) a hibaüzenet nem váltja ki freetreeés (2) az Ön által használt szálak, amelyek könnyen visszaélnek.

Válaszolt 24/10/2011 14:10
a forrás felhasználó

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