2011-03-12 156 views
1

我有一個QML/C++混合應用程序,它相當複雜,只有少數線程在後臺更新數據。一切都完美的作品,除了當我做出了一定的ListView可見,填充它,然後退出應用程序,有一個斷言失敗的調試器中斷在以下位置:QT QML/C++應用程序崩潰退出

QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding() 
{ 
    Q_ASSERT(m_prevBinding == 0); //<---- THIS GUY IS THE OFFENDING LINE 
    Q_ASSERT(m_mePtr == 0); 
} 

,這裏是堆棧跟蹤:

> QtCored4.dll!qt_message_output(QtMsgType msgType, const char * buf) Line 2270 C++ 
    QtCored4.dll!qt_message(QtMsgType msgType, const char * msg, char * ap) Line 2328 + 0x12 bytes C++ 
    QtCored4.dll!qFatal(const char * msg, ...) Line 2511 + 0xf bytes C++ 
    QtCored4.dll!qt_assert(const char * assertion, const char * file, int line) Line 2027 + 0x16 bytes C++ 
    QtDeclaratived4.dll!QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding() Line 293 + 0x1e bytes C++ 
    QtDeclaratived4.dll!QDeclarativeCompiledBindingsPrivate::Binding::~Binding() + 0x3d bytes C++ 
    QtDeclaratived4.dll!`eh vector destructor iterator'(void * ptr, unsigned int size, int count, void (void *)* pDtor) + 0x6b bytes C++ 
    QtDeclaratived4.dll!QDeclarativeCompiledBindingsPrivate::Binding::`vector deleting destructor'() + 0x26 bytes C++ 
    QtDeclaratived4.dll!QDeclarativeCompiledBindings::~QDeclarativeCompiledBindings() Line 274 + 0x33 bytes C++ 
    QtDeclaratived4.dll!QDeclarativeCompiledBindings::`scalar deleting destructor'() + 0xf bytes C++ 
    QtDeclaratived4.dll!QDeclarativeRefCount::release() Line 66 + 0x20 bytes C++ 
    QtDeclaratived4.dll!QDeclarativeCompiledBindingsPrivate::Binding::destroy() Line 328 C++ 
    QtDeclaratived4.dll!QDeclarativeData::destroyed(QObject * object) Line 1000 C++ 
    QtDeclaratived4.dll!QDeclarativeData::destroyed(QAbstractDeclarativeData * d, QObject * o) Line 463 C++ 
    QtCored4.dll!QObject::~QObject() Line 860 + 0x11 bytes C++ 
    QtDeclaratived4.dll!QDeclarativeAbstractAnimation::~QDeclarativeAbstractAnimation() Line 94 + 0x2a bytes C++ 
    QtDeclaratived4.dll!QDeclarativePropertyAnimation::~QDeclarativePropertyAnimation() Line 1827 + 0x8 bytes C++ 
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativePropertyAnimation>::~QDeclarativeElement<QDeclarativePropertyAnimation>() Line 90 + 0xf bytes C++ 
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativePropertyAnimation>::`scalar deleting destructor'() + 0xf bytes C++ 
    QtCored4.dll!QObjectPrivate::deleteChildren() Line 1949 + 0x24 bytes C++ 
    QtCored4.dll!QObject::~QObject() Line 947 C++ 
    QtDeclaratived4.dll!QDeclarativeTransition::~QDeclarativeTransition() Line 168 + 0x9 bytes C++ 
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativeTransition>::~QDeclarativeElement<QDeclarativeTransition>() Line 90 + 0xf bytes C++ 
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativeTransition>::`scalar deleting destructor'() + 0xf bytes C++ 
    QtCored4.dll!QObjectPrivate::deleteChildren() Line 1949 + 0x24 bytes C++ 
    QtCored4.dll!QObject::~QObject() Line 947 C++ 
    QtGuid4.dll!QGraphicsObject::~QGraphicsObject() + 0x48 bytes C++ 
    QtDeclaratived4.dll!QDeclarativeItem::~QDeclarativeItem() Line 1504 + 0x1f bytes C++ 
    QtDeclaratived4.dll!QDeclarativeRectangle::~QDeclarativeRectangle() + 0xf bytes C++ 
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativeRectangle>::~QDeclarativeElement<QDeclarativeRectangle>() Line 90 + 0xf bytes C++ 
    QtDeclaratived4.dll!QDeclarativePrivate::QDeclarativeElement<QDeclarativeRectangle>::`scalar deleting destructor'() + 0xf bytes C++ 
    QtDeclaratived4.dll!QDeclarativeViewPrivate::~QDeclarativeViewPrivate() Line 135 + 0x67 bytes C++ 
    QtDeclaratived4.dll!QDeclarativeViewPrivate::`scalar deleting destructor'() + 0xf bytes C++ 
    QtCored4.dll!QScopedPointerDeleter<QObjectData>::cleanup(QObjectData * pointer) Line 62 + 0x20 bytes C++ 
    QtCored4.dll!QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >::~QScopedPointer<QObjectData,QScopedPointerDeleter<QObjectData> >() Line 100 + 0x9 bytes C++ 
    QtCored4.dll!QObject::~QObject() Line 963 + 0x12 bytes C++ 
    QtGuid4.dll!QWidget::~QWidget() Line 1620 + 0x25 bytes C++ 
    QtGuid4.dll!QFrame::~QFrame() Line 242 + 0x8 bytes C++ 
    QtGuid4.dll!QAbstractScrollArea::~QAbstractScrollArea() Line 526 + 0xf bytes C++ 
    QtGuid4.dll!QGraphicsView::~QGraphicsView() Line 1165 + 0xf bytes C++ 
    QtDeclaratived4.dll!QDeclarativeView::~QDeclarativeView() Line 300 + 0x9 bytes C++ 
    MyApplication.exe!QDeclarativeView::`scalar deleting destructor'() + 0x10 bytes C++ 
    QtCored4.dll!QObjectPrivate::deleteChildren() Line 1949 + 0x24 bytes C++ 
    QtGuid4.dll!QWidget::~QWidget() Line 1602 C++ 
    QtGuid4.dll!QMainWindow::~QMainWindow() Line 389 + 0x22 bytes C++ 
    MyApplication.exe!MainWindow::~MainWindow() Line 77 + 0x66 bytes C++ 
    MyApplication.exe!MainWindow::`scalar deleting destructor'() + 0xf bytes C++ 
    MyApplication.exe!boost::checked_delete<MainWindow>(MainWindow * x) Line 34 + 0x21 bytes C++ 
    MyApplication.exe!boost::detail::sp_counted_impl_p<MainWindow>::dispose() Line 78 + 0xc bytes C++ 
    MyApplication.exe!boost::detail::sp_counted_base::release() Line 103 C++ 
    MyApplication.exe!boost::detail::shared_count::~shared_count() Line 221 C++ 
    MyApplication.exe!boost::shared_ptr<MainWindow>::~shared_ptr<MainWindow>() + 0x12 bytes C++ 
    MyApplication.exe!boost::shared_ptr<MainWindow>::reset() Line 387 C++ 
    MyApplication.exe!main(int argc, char * * argv) Line 68 C++ 
    MyApplication.exe!WinMain(HINSTANCE__ * instance, HINSTANCE__ * prevInstance, char * __formal, int cmdShow) Line 131 + 0x12 bytes C++ 
    MyApplication.exe!__tmainCRTStartup() Line 547 + 0x2c bytes C 
    MyApplication.exe!WinMainCRTStartup() Line 371 C 
    [email protected]@12() + 0x12 bytes  
    [email protected]() + 0x27 bytes 
    [email protected]() + 0x1b bytes  

編輯:

問題: 我該如何消除這個問題?我的代碼可能有什麼問題?沒有關於如何發生的信息。

+0

我不確定你在問什麼。如果斷言失敗,那意味着那個時候'm_prevBinding!= 0'。既然你的問題沒有背景,我真的不知道你在問什麼問題。 – Mat 2011-03-12 09:33:08

回答

1

如果沒有看到應用程序代碼,很難知道發生了什麼。另外,如果可以創建一個能夠再現此崩潰的獨立示例,我建議在https://bugreports.qt.io處提交一個錯誤。

1

對於遲到的回覆,我檢查了我的QML文件,發現當我在單個「狀態」元素中使用同一目標定義多個「PropertyChange」元素時,會發生該錯誤。我在一個「PropertyChange」元素中將同一項目的所有屬性更改分組,並且問題消失。但這很奇怪,斷言失敗並不是很明確。也試圖用這些信息重現錯誤,但不能成功。可能還有其他因素,我錯過了。不管怎麼說,多謝拉。