[gelöst] Runtime Error



  • Hallo,

    ich habe folgenden Code um eine Datei zeilenweise einzulesen und die Daten an eine ListView zu übergeben:

    cardList.clear();
            QFile cardFile(":/dateien/standard.txt");
            if (!cardFile.open(QIODevice::ReadOnly))
            {
                QMessageBox::information(0, "Error opening file", cardFile.errorString());
            }
            else
            {
                while(!cardFile.atEnd())
                {
                    QString line = cardFile.readLine();
                    cardList.append(line);
                }
                cardFile.close();
            }
    
            // Populate our model
            cardViewModel->setStringList(cardList);
    
            // Glue model and view together
            ui->cardView->setModel(cardViewModel);
            ui->cardView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    

    Wenn ich nun die Line noch splitten möchte, stürzt das Programm mit folgendem Fehler ab:

    ASSERT failure in QList<T>::operator[]: "index out of range", file ..\..\QT5.5.0\5.5\mingw492_32\include/QtCore/qlist.h, line 518

    cardList.clear();
            QFile cardFile(":/dateien/standard.txt");
            if (!cardFile.open(QIODevice::ReadOnly))
            {
                QMessageBox::information(0, "Error opening file", cardFile.errorString());
            }
            else
            {
                while(!cardFile.atEnd())
                {
                    QString line = cardFile.readLine();
                    QStringList l = line.split("#");
                    cardList.append(l[1]);
                }
                cardFile.close();
            }
    
            // Populate our model
            cardViewModel->setStringList(cardList);
    
            // Glue model and view together
            ui->cardView->setModel(cardViewModel);
            ui->cardView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    

    Außerdem sind zwischen den Zeilen leerzeilen zu erkennn, die im textfile nicht da sind.

    Wenn ich die daten mit einer for schleife einfach zahlen einfüge sind diese auch nicht da.



  • Du solltest prüfen ob l auch 2 Elemente besitzt bevor du drauf zugreifst.

    // Zeile 13
    if (l.size() > 0 ) //  bzw. in deinen Fall > 1, weil du auf das 2. Element zugreifst. l.size() oder l.lenght() weiß ich jetzt nicht genau.
    {
        cardList.append(l[1]);
    }
    

    Guck dir deine Datei mal mit einen Hex-Editor oder ähnlich an.


Log in to reply