*** glibc algılandı *** ./a.out: Çift serbest veya bozulması (üst): 0x08901d70 *** Bir BST özgür çalışılırken

oy
0

Ben Mesajları bazı tespit glibc vardır farkında mısın ama bunun için bir çözüm önermek eğer ben çok minnettar olacaktır:

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

Bu bir ikili arama ağacı özgür çalıştıklarında gerçekleşmesi gibi görünüyor:

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

yapı BNODEPTR için typedef olan

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

Ben ana () kullanarak freetree (kök) den işlevini arıyorum.

ağaç bir inorder geçişi sıralanmış bir çıktı üretir olarak doğru bir şekilde uygulandığında gibi görünüyor.

tüm kod yer almaktadır:

http://pastebin.com/Eieu3xDa ve

http://pastebin.com/jtGN6XKj

Oluştur 24/10/2011 saat 14:07
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
3

Ben senin kaynak kodu elemek ama dedikleri gibi, "Birine bir balık besleyin ..." olabilir

  1. Semboller hata ayıklama ile kodunuzu derlemek (geçmesine -gderleyici). Bunu yaparsanız, bunun yerine bir fonksiyonu adını alabilir ./a.out[0x8048998]backtrace.

  2. Valgrind en kodunuzu çalıştırın MemCheck aracı (varsayılan aracı). Bu, hata nerede hakkında çok daha iyi bir ipucu verebilir. Sadece Valgrind yükleyip çalıştırabilirsiniz valgrind ./a.outbaşlayanlar için.

Özellikle, ben bütün ikili ağaç kırmızı ringa olduğunu düşünüyorum. Başka bir yerde programınızda başka sorun var. Backtrace aldığım bilgilere göre, (1) hata mesajı tetiklemediğiniz görebilirsiniz freetreeve (2) kolayca yanlış kullanıldığı konuları kullanıyorsunuz.

Cevap 24/10/2011 saat 14:10
kaynak kullanıcı

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