簡體   English   中英

C ++-Qt奇怪的QList :: at()錯誤

[英]C++ - Qt Strange QList::at() error

void MainWindow::onWishlistEditButtonClicked()
{
    QInputDialog *inputDialog = new QInputDialog();
    inputDialog->setOptions( QInputDialog::NoButtons );
    static QString defaultText = "Default Wishlist";

    //No Error here, prints 0 as expected
    qDebug() << wishLists.size();


    bool isOk = false;
    QString text = inputDialog->getText( NULL, "Create a Wishlist", "Wishlist Name: ", QLineEdit::Normal, defaultText, &isOk );

    if( isOk && !text.isEmpty() ) {

        if( text.length() >= 100 ) {

            defaultText = text; //on next pop up this will be the text

            //let user know that the maximum number can only be 100
            QMessageBox::critical( this, "Error", "The maximum number of characters is 100.", QMessageBox::Ok );
        } else {

            defaultText = "Default Wishlist";

            WishList wishlist( text );
            if( wishlist.save() ) {
                wishlistBox->addItem( text );
                wishLists.push_back( wishlist ); //any method invoked by this object will cause the same error even .size()
            } else {
                QMessageBox::critical( this, "Error", "Could not create wishlist.", QMessageBox::Ok );
            }

        }

    }

    inputDialog->deleteLater();
}

我在其中使用qDebug() << wishLists.size(); 很好。 QList本身已初始化但為空。 但是,當我使用wishLists.push_back( wishlist ); 或QList的任何其他功能,我將收到此錯誤:

ASSERT failure in QList<T>::at: "index out of range", file ../../../Qt5.5.1/5.5/gcc_64/include/QtCore/qlist.h, line 510
The program has unexpectedly finished.

這只是最近的錯誤。 昨天情況很好,無需對程序進行任何更改! 每次我保存願望清單並重新啟動程序時,它將所有願望清單讀入qlist。 因此,一旦我在列表中至少有一項,它就不會拋出此錯誤。

有什么想法怎么了?

更新:

0   __GI_raise  /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.19.so    56  0x7ffff5d5acc9  
1   __GI_abort  /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.19.so    89  0x7ffff5d5e0d8  
2   QMessageLogger::fatal(const char *, ...) const          0x7ffff669513e  
3   qt_assert_x(const char *, const char *, const char *, int)          0x7ffff6690701  
4   QList<WishList>::at qlist.h 510 0x40c725    
5   MainWindow::updateListView  mainwindow.cpp  204 0x408539    
6   MainWindow::onWishlistChanged   mainwindow.cpp  99  0x407c2e    
7   MainWindow::qt_static_metacall  moc_mainwindow.cpp  102 0x413520    
8   QMetaObject::activate(QObject *, int, int, void * *)            0x7ffff68c335e  
9   QComboBox::currentIndexChanged(int)         0x7ffff77be121  
10  ??          0x7ffff77c0451  
11  ??          0x7ffff77c26dd  
12  QComboBox::setCurrentIndex(int)         0x7ffff77c294f  
13  ??          0x7ffff77c79d9  
14  QMetaObject::activate(QObject *, int, int, void * *)            0x7ffff68c335e  
15  QAbstractItemModel::rowsInserted(QModelIndex const&, int, int, QAbstractItemModel::QPrivateSignal)          0x7ffff693fd84  
16  QAbstractItemModel::endInsertRows()         0x7ffff683fea2  
17  ??          0x7ffff71cd5bb  
18  QComboBox::insertItem(int, QIcon const&, QString const&, QVariant const&)           0x7ffff77c3f18  
19  QComboBox::insertItem   qcombobox.h 268 0x4092a8    
... <More>              

崩潰更有可能實際發生在:

            wishlistBox->addItem( text );

由於您的調用堆棧位於某些與模型相關的更新代碼中,因此您可能想先添加到列表中:

            wishLists.push_back( wishlist );
            wishlistBox->addItem( text );

如我所料,簡單地修改QList就可以給出這樣的調用堆棧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM