2010-11-18 33 views
0

gdb dosyasında geçerli ve tam erişilebilir bir nesneye erişirken segmentasyon hatası alıyorum. Segmentasyon her zaman erişilemez bellek ile ilgili değil mi?Geçerli bellekte parçalanma hatası

DÜZENLEME: daha fazla ayrıntı.

Kaza, gdb'nin altında gerçekleşir, böylece nesnenin belleğini inceleyebilirdim. Üyelerin uygun değerlere ayarlanmış olması sayesinde, salt okunur belleğe erişme şansım olmadı. Düştüğün yerde komut, Var = Obj.GetMember() türünde Var, GetMember ve karşılık gelen üye kısa tamsayılardır. Hizalama? Sanırım otobüs hatası, segmentasyona neden olmaz. Her şeyi yeniden inşa etmeye çalışacağım. Sorun şu ki bu kod parçası saniyede binlerce kez çalışıyor ve segmentasyon birkaç günde bir oluyor.

+2

Bazı kod ekleyebilir misiniz? – Kos

+0

Daha fazla detay lütfen. –

+0

Bellek bozulmasını kontrol etmek için valgrind'i deneyin. –

cevap

2

Yeniden oluşturma işlemini tamamlayın (temiz & & marka olun), bu çok garip hatalarla karşılaştığımda birkaç kez bana yardımcı oldu.

Geç UPD: Bu sorunu çözmek yaparsa

, genellikle bir şey örneğin makefile, .cpp ve .h dosyaları arasında genellikle berbat bağımlılıkları, yanlış olduğu anlamına gelir: a.cpp bh içerir ancak bh, a.cpp'nin bağımlılıklarında listelenmez.

+0

Birkaç hafta önce bunun hakkında bir soru sordum. http://stackoverflow.com/questions/3997404/initialization-of-member-bug-in-gcc-or-my-thinking –

0

Temel olarak, evet. Segment hatayı analiz etmek için çekirdek dökümü kullandınız mı?

0

Kod çok yardımcı olur, ancak temiz bir şey yaptınız mı? Bir sınıfın boyutunu artırdıysanız ve bağımlılıklarınız doğru değilse, o zaman bir örnek için yeterli alan kalmayacak ve bu sınıf bellekte önceliği olan her şeyi taşacak ve bozacaktır.

2

yapabilirsiniz olsun arızalar hatta bazı durumlarda "geçerli" belleğe erişim eğer:

  • Belleği değiştirmeye çalışıyor, ancak belirli haritalama salt okunur bir kod yürütmesine çalışıyorsanız
  • olduğunu Yürütülmeyen bellek alanı
  • örn. Bir yanlış hizalanmış adreste yükleme/depolama ve donanım sorunları hizalama istisnalar coredump bir göz olmadan

oldu faylanma talimat (yük/mağaza/yürütme) anlamaya ve erişilen için tam olarak ne haritalama izinleri için Ayırmak imkansızdı.

İlgili konular