在实现将tableview中将查询出来的信息全部删除这一功能时,出现了一些错误。上网查了很多说法,大致分为野指针和运行库的问题。看了错误提示,明显是删除的时候出了问题。
先上一段错误代码
//将查出来的全删除
void seek_staff::on_all_delete_button_clicked()
{
int n;
qDebug() << "全部删除" << endl;
for(n=0;n<model->rowCount();n++)
{
QModelIndex index = model->index(n,0);
QVariant str = model->data(index);
if(str=="")
{
qDebug() << "删完了" << endl;
break;
}
else{
for(manage.staff_it = manage.staff_v.begin();\
manage.staff_it != manage.staff_v.end();manage.staff_it++)
{
if(str.toInt()==manage.staff_it->get_id())
{
qDebug() << "找到:" << str.toInt() <<endl;
break;
}
}
manage.staff_v.erase(manage.staff_it);//该位置错误
manage.write("staff.txt");
manage.read("staff.txt");
}
}
on_confirm_seek_button_clicked();
}
错误提示:
ASSERT failure in QVector::erase: "The specified iterator argument 'aend' is invalid", file D:\qt\5.9.1\mingw53_32\include/QtCore/qvector.h, line 730
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
————————————————————————————————————————
this application has request the runtime to terminate it in an unusual way.
错误截图
可以看出是迭代器删除的时候出了问题。
更正之后的代码:
//将查出来的全删除
void seek_staff::on_all_delete_button_clicked()
{
int n;
qDebug() << "全部删除" << endl;
for(n=0;n<model->rowCount();n++)
{
QModelIndex index = model->index(n,0);
QVariant str = model->data(index);
if(str=="")
{
qDebug() << "删完了" << endl;
break;
}
else{
for(manage.staff_it = manage.staff_v.begin();\
manage.staff_it != manage.staff_v.end();manage.staff_it++)
{
if(str.toInt()==manage.staff_it->get_id())
{
qDebug() << "找到:" << str.toInt() <<endl;
manage.staff_v.erase(manage.staff_it);
break;
}
}
manage.write("staff.txt");
manage.read("staff.txt");
}
}
on_confirm_seek_button_clicked();
}
运行没问题了,可是对于编程新手来说还不是太懂,为什么放在外面就会出错。有没有路过的好心人帮忙解答一下啊~