2009-11-30 39 views
20

Oldukça karmaşık bir kodla ilgili sorun yaşıyorum. Hatayı yeniden üreten kısa bir snippet üretemedim, bu yüzden söz konusu problemi kelimelerde açıklamaya çalışacağım."Bozuk çift bağlantılı liste" hatasına neden olabilir?

kod ayıklama bu kodlar bir nesneyi serbest bırakır çizgi gelen gösterdi hata

*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 *** 

rastgele çöker. Nesnede yanlış bir şey yok gibi görünüyor. Vardır ve bu hatanın gerçekleştiği anda verilere erişebilirim. Nesnenin yıkıcısı önemsiz ve hiçbir şey yapmıyor.

Yani, sıkışmış durumdayım. Ne tür durumlarda 'özgür' başarısızlığa uğrarsın?

+8

Büyük ihtimalle hafızanızı başka bir yere bozmak gibi görünüyor ve bu sadece bir yan etki. –

cevap

11

Programınızı Valgrind'un altında çalıştırmayı deneyin. Bu daha önceki bir nedene işaret edebilir, oysa gdb sadece hasarın meydana geldiği yerde kırılır.

+1

Teşekkürler. Onu deneyeceğim. Kendimle gelebilirdi ... Bu gerçekten çok yavaş ve hatayı kolayca yeniden üretemediğimden bir süre alabilir. – hanno

+1

Bunu nasıl çözdünüz? Bunun neden olduğu gibi bir fikrin var mı, çünkü aynı problemi yaşıyorum? –

+2

@AmitBhaira: Çözmedim ve yorum yapmanın hanno'nun dikkatini çekeceğini sanmıyorum. Hanno'nun önerdiğim şeyi denemesini bekledim ve Valgrind ona listesini bozan sorunu gösterdi. Valgrind'i denedin mi? Bu problem sınıfına tek ve basit bir çözüm yoktur. Bellek bozulma sorunlarının, izlenmesi çok zor olduğu için çok zor. Çünkü onlar çok farklı nedenlere sahip olabilirler ve yolsuzluğun görünür etkisi, asıl hasarın asıl sebebinden çok uzak görünebilir. –