问题描述
我对 C++ 有点生疏,我正在回归它以变得更好。我已经在 StackOverflow 上搜索了一些无济于事。我遇到的问题是“列表迭代器不可增加”。下面是我认为是罪魁祸首的部分,因为这是我使用带修饰符的迭代器的唯一位置。
if (!io_queue.empty()) {
for (list<Process>::iterator it = io_queue.begin(); it != io_queue.end(); ++it) {
if (it->isBurstDone()) {
if (it->isComplete()) {
it->setExit(clock);
complete.push_back(*it);
it = io_queue.erase(it);
}
else {
ready_queue.push_back(*it);
it = io_queue.erase(it);
}
}
else {
it->decBurst();
}
}
}
解决方法
您在每次循环迭代中都无条件地递增 it
。但是当调用 erase()
时,它会返回一个新的迭代器到被擦除后的下一个列表元素,因此如果这导致 it
被设置为 end
迭代器而不是递增 { {1}} 再次是未定义行为。
只需将 it
从 ++it
语句移动到循环内的 for
块。
试试这个:
else