C++ 我一直得到这个调试断言失败?表达式:列表迭代器不可取消引用
我从以下代码中得到一个断言失败“列表迭代器不可取消引用”: 上面说是最后一行的C++ 我一直得到这个调试断言失败?表达式:列表迭代器不可取消引用,c++,C++,我从以下代码中得到一个断言失败“列表迭代器不可取消引用”: 上面说是最后一行的 void cpuschedule::Sjf() { int CT = 0; bool IO = false; Data temp; for(it = lPro.begin(); it != lPro.end(); ++it) { if(it->RQ) { temp.AT = it->AT;
void cpuschedule::Sjf()
{
int CT = 0;
bool IO = false;
Data temp;
for(it = lPro.begin(); it != lPro.end(); ++it)
{
if(it->RQ)
{
temp.AT = it->AT;
temp.BUT = it->BUT;
temp.BUP = it->BUP;
temp.IOP = it->IOP;
temp.IOT = it->IOT;
temp.ProNum = it->ProNum;
temp.RQ = it->RQ;
temp.vData = it->vData;
Ready.push_back(temp);
}
}
it2 = Ready.begin();
while(!(Ready.empty()))
{
if(IO)
{
for(iR = Ready.begin(); iR != Ready.end(); ++iR)
{
if(!(iR->RQ))
{
(iR->IOT)--;
if(iR->IOT == 0)
{
iR->BUP += 2;
iR->IOP += 2;
iR->BUT = iR->vData[(iR->BUP)];
iR->IOT = iR->vData[(iR->IOP)];
iR->RQ = true;
iR->AT = CT;
}
if(iR->IOT == -121)//Check for the end of the Vector
{
temp.AT = iR->AT;
temp.BUT = iR->BUT;
temp.BUP = iR->BUP;
temp.IOP = iR->IOP;
temp.IOT = iR->IOT;
temp.ProNum = iR->ProNum;
temp.RQ = iR->RQ;
temp.vData = iR->vData;
Out.push_back(temp);//Instert to the List of Done
iR = Ready.erase(iR);
}
}
}
}
Ready.sort(comp);
if((it2->BUT != 0) && (it2->RQ))
{
it2->BUT--;
if(it2->BUT == 0)
{
printState(CT);
it2->RQ = false;
IO = true;
if(next(it2) == Ready.end())
{
it2 = Ready.begin();
}
else
++it2;
}
}
CT++;
}
}
这是CPU调度SJF的while循环。
它上升到691,应该执行901个循环您的循环执行
iR=Ready.erase(iR)代码>然后执行iR++
。如果被擦除的元素是最后一个,则这是错误的;你一个接一个
常见的成语是:
for ( ; iR != end; ) { // <-- NO iR++
if (condition_to_erase)
iR = Ready.erase(iR);
else
iR++;
}
for(;iR!=end;){//这是一大块代码,我看不出您已经指出崩溃发生在哪一行,但是-您应该检查您正在使用的容器的迭代器it2
在erase()
和sort()之后是否仍然有效
操作。将it2
的声明向下移动到使用前,这可能是更好的风格。你的it
和lPro
看起来怎么样?你能告诉我们你在哪里声明的吗?我相信大部分代码都不需要重现问题。发布一个显示p问题。