qt迭代器使用,遇上erase函数,程序崩溃
问题:在qlist用erase函数删除元素时候,发生程序崩溃。
经过测试发现
- 数组有多个元素,删除最后一个会程序崩溃
- 数组有多个元素,删除非最后一个不会程序崩溃
- 数组只有一个元素,删除最后一个不会程序崩溃
通过分析源码以及打印iterator发现
- 数组有多个元素,删除最后一个时,
iterator it
已经和list.end()
一样了,再经过it++
循环后,数组越界,导致程序崩溃
修改方法
在for循环最后一行追加容错
if(it == list.end()) break; //追加容错,防止崩溃
代码示例
int main(int argc, char *argv[])
{
QList<int> list;
list<<1<<2;
QList<int>::iterator it;
for(it = list.begin(); it!=list.end();it++)
{
if(*it == 2)
list.erase(it);
/*
qt 迭代器,erase函数删除时候,如果数组中有1个以上元素,且删除最后一个元素,会导致程序崩溃
*/
if(it == list.end()) break; //追加容错,防止崩溃
}
return 0;
}