Αντιλαμβάνομαι ότι υπάρχουν κάποιες «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);
}
}
Η δομή typedef'd να BNODEPTR
struct bnode{
int info;
int count;
struct bnode* left;
struct bnode* right;
};
Ζητώ τη λειτουργία από το κύριο () χρησιμοποιώντας freetree (root).
Το δέντρο φαίνεται να εφαρμοστεί σωστά ως διάσχιση inorder παράγει μια ταξινομημένη έξοδο.
Το σύνολο του κώδικα είναι:













