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