我正在为类编写一个程序,该程序基本上运行1000次页面替换算法,以显示平均页面错误更少。我的问题是我从xmemory收到一个错误。
将代码缩小到始终出现错误的区域。 checkFrames()检查数组以查看其是否已包含inputString [i]。 frame1,frames2等是根据算法将输入分配给其的数组,每个大小对应其编号。 randomInputString()就是它的声音。
constexpr auto INPUTNUM = 10;
list<int> framesLRU;
list<int>::iterator it;
int frames = 1;
void LRU()
{
for (int i = 0; i < INPUTNUM; i++)
{
bool inFrames = checkFrames(inputString[i]);
if (inFrames == true)
{
it = find(framesLRU.begin(), framesLRU.end(), frameRep);
framesLRU.erase(it);
framesLRU.push_back(frameRep);
}
else
{
int frameUpdate = framesLRU.front();
framesLRU.pop_front();
framesLRU.push_back(frameUpdate);
switch (frames)
{
case 1:
frames1[frameUpdate] = inputString[i];
break;
case 2:
frames2[frameUpdate] = inputString[i];
break;
case 3:
frames3[frameUpdate] = inputString[i];
break;
case 4:
frames4[frameUpdate] = inputString[i];
break;
case 5:
frames5[frameUpdate] = inputString[i];
break;
case 6:
frames6[frameUpdate] = inputString[i];
break;
case 7:
frames7[frameUpdate] = inputString[i];
break;
}
pageFaults++;
}
if ((i < frames) && (inputString[i] == 0))
pageFaults++;
}
}
int main()
{
srand(time(NULL));
for (int i = 0; i < 1000; i++)
{
randomInputString();
frames = 1;
do
{
runLRU(i);
frames++;
} while (frames <= 7);
}
printTable();
return 0;
}
该错误总是在main的for循环中的i的第59次迭代中发生,但是在do while循环中,它何时发生似乎是随机的。 尽管它似乎确实在这里发生:
it = find(framesLRU.begin(), framesLRU.end(), frameRep);
framesLRU.erase(it);
framesLRU.push_back(frameRep);
在LRU()函数中的。 i的迭代和帧的值似乎与该错误不一致。
编辑:我发现了问题所在。我在数组中赋值的方式是错误的。