this iş parçacığı gördüm. Benim durumum biraz farklı ve ben "this"
işaretçisinin nasıl bozulduğunu anlamaya çalışıyorum."Bu" işaretçi yığın izinde bozuk hale geliyor
Qt 4.6.2 çerçevesini kullanarak, kendi modelimle QTreeView
ürününü kullanıyorum. Ben de her şeyi yapıştırmadıysanız neden özyineleme bir sürü alıyorum backtrace (86 kare uzunluğunda, bu pastebin sadece kendi kodunu içerir içinde bu, bu. Sonunda QBasicAtomicInt bazı assembler üzerinde çalışma sırasında parçalama arızası
:: DEREF ama bu üç kare ile, daha da aşağı öldü kanıtladığı olduğu açıktır. çerçevede 17 yılında
#15 0x01420fd3 in QFrame::event (this=0x942bba0, e=0xbf8eb624) at widgets/qframe.cpp:557
#16 0x014bb382 in QAbstractScrollArea::viewportEvent (this=0x4, e=0x93f9240) at widgets/qabstractscrollarea.cpp:1036
#17 0x0156fbd7 in QAbstractItemView::viewportEvent (this=0x942bba0, event=0xbf8eb624) at itemviews/qabstractitemview.cpp:1610
, this
0x942bb0
olan çerçeve 16 yılında this
çerçeve 17'de o aradığını gibi aynı olmalıdır onun Atasının aynı yöntemin uygulanması.Ancak this
, 0x4 olur.
İlginç bir şekilde, 15 numaralı karede (yine, 16 numaralı çerçeve, atalarının aynı işlevi yerine getirmesini gerektirdi), 'bu' işaretçisi 0x942bba0
olarak geri yüklendi.
Tam backtrace'in pastebinine bakarsanız, 'value optimized out' değerini görebilirsiniz. Optimizasyon ile derlenmiş uygulama vardı; Şimdi gcc -g3 -O0
'a ayarlıyorum, böylece bir dahaki sefere daha fazla bir şeyim olabilir. Ama tabi ki şimdi çökmesini sağlayamıyorum - gerçekleşmesi oldukça zor bir hatadır (yine de düzeltmek çok önemlidir) bu yüzden çok şüpheli olduğunu düşünmüyorum.
Optimizasyonlar göz önüne alındığında, bu this
pointer=0x4
olağandışı mı yoksa kesinlikle yanlış mı? Garip olan şey, bu viewportEvent çerçevelerinin hiçbirinde gerçek bir kod bulunmamasıdır - yalnızca olayın türünde bir anahtar yapar, anahtar deyiminden geçer ve atalarının uygulamasını döndürür. Valgrind'de henüz çökmemesine rağmen, Valgrind herhangi bir sorun yaratıyor gibi görünmüyor.
Bu davranışı daha önce gören oldu mu? Buna neden olabilir?
+1, uzun geri Kodumla aynı sorunu görmüştüm; Nasıl tamir ettiğimi bilmiyorum; ama bana eski zamanları hatırlatıyor.:) – iammilind
Kodu derlerken herhangi bir uyarı var mı? Önce onları düzelt. –
@iammilind: Bu, favori bir soruyu (yıldızın üzerine tıklayarak) yapmak için bir neden, ancak onu oylamada değil. –