我有一个使用visual studio 2003构建的旧项目,最近我用vs2005重新编译了它.但是,在运行时,我收到以下错误:
列表迭代器不可递增
我跟踪程序到这个函数:
void InputQueue::update() { list::iterator iter; list ::iterator iterTemp; for(iter = begin(); iter != end(); iter++) { if(iter->arrivalTime == 0) { ReadyQueue::getInstance()->add(*iter); iterTemp = iter; iter++; erase(iterTemp); } } }
我不是C++专家,这就是VS调试器给我的.有人可以向我解释问题是什么吗?
谢谢
我会重新编写你的循环,如下所示:
while (iter != end()) { if (iter->arrivalTime == 0) { ReadyQueue::getInstance()->add(*iter); iter = erase(iter); } else { ++iter; } }
现在,您正在循环检查每个索引的列表.
请注意,如果iter->arrivalTime == 0
,则列表迭代器增加两次:在元素删除之前一次,在循环结束时再次增加.
如果要删除的项目是列表中的最后一项,则显然无法正常工作.我敢说它甚至在VS2003中都没有正常工作,但是VS2005会更好地提醒你.:-)
请记住,迭代过去是未定义的行为end()
.绝对可能发生任何事情,例如程序崩溃,或(在这种情况下)错误消息.