QT报错显示越界index out of range

QT总是越界,我想在tablewidget中输出txt文件,QT越界报错,后来网上找了个没问题的代码,新建个项目,运行还是报错


```c++
 ui->tableWidget->setColumnCount(6);
    QStringList header;
    header<<"书名"<<"作者"<<"出版日期"<<"总数量"<<"单价"<<"在馆数量";
    ui->tableWidget->setHorizontalHeaderLabels(header);
    QFile f("E:\\librarQTUI\\bookdata.txt");
    f.open(QIODevice::ReadOnly|QIODevice::Text);
    QTextStream output(&f);
    QHash<QString,QString> varHash;
    QString lineStr;
    QStringList linelist;
    varHash.clear();
    linelist.clear();
    while(!output.atEnd())
    {
        lineStr=output.readLine();
        linelist=lineStr.split("\t");
        int rowCount=ui->tableWidget->rowCount();
        ui->tableWidget->insertRow(rowCount);
        for(int i=0;i<6;i++)
        {
            ui->tableWidget->setItem(rowCount,i,new QTableWidgetItem(linelist[i]));
        }
    }
    f.close();
}


img

```

linelist没有正确的数值,可能遇到了空行,也可能遇到一行中少于6个字段的信息,也可能各字段不是使用tab键分隔的

你在23行上面打印一下list的长度,看看是不是6

std::cout<<linelist.size()<<std::endl;

这很正常啊,肯定是你的数据文件 f("E:\librarQTUI\bookdata.txt")中列数 linelist=lineStr.split("\t");不够6个导致的,因此你应该加上对 linelist个数的判断,防止越界。

数组越界异常了。
读取文件内容进行分割后,内容不足六个。
文件中的内容每行有没有六个,都是以/t进行隔开的吗


for(int i=0;i<6;i++)

你怎么就确定里面有6个呢,先对linelist做数量判断