0
我從下面的代碼中收到斷言失敗「列表迭代器不可取消」:我不斷收到此調試斷言失敗?表達式:列表迭代器不可解引用
它說它是從最後一行開始的。
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循環
這就是代碼了一大截,我無法看到你已指示該行飛機墜毀,但是 - 你也許應該檢查迭代器'it2'因爲你使用的容器在'erase()'和'sort()'操作後仍然有效。將「it2」的聲明下移到使用前,這可能是更好的風格。 –
你的'it'和'lPro'是怎麼樣的?你能告訴我們你在哪裏申報了嗎? – mihai
我相信大部分代碼不需要重現該問題。發佈展示該問題的較小版本。 –