c++ - 抛出未处理的异常:读取访问冲突。_Pnext 为 0xC
问题描述
我正在为类编写一个程序,该程序基本上运行页面替换算法 1000 次,以显示哪个具有较少的平均页面错误。我的问题是我从 xmemory 收到的错误。
代码减少到错误始终出现的区域。checkFrames() 检查一个数组以查看它是否已经包含 inputString[i]。frames1、frame2 等是根据算法分配输入的数组,每个数组的大小对应于它们的编号。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 的迭代和 frames 的值似乎与错误不一致。
编辑:我发现了问题。我在数组中分配值的方式是错误的。
解决方案
推荐阅读
- python - 抓取源文件 Python 中不可见的数据
- node.js - 在 NodeJS / Express / React 堆栈中记录错误
- php - Wordpress 不断向简码和内容添加自动段落标签
- python - 每次我可以使用 pandas.DataFrame.to_sql 插入数据库中的表的最大行数
- tensorflow - TensorFlow 如何在 Windows 10 的 GPU 上同时使用共享和专用 GPU 内存?
- mysql - Mysql - 如何在有条件的不同列中将值显示到同一行中
- c++ - 如何创建 QList 的 QList
? - javascript - 在 React Native 中与 this 绑定
- javascript - 如何在 React 应用程序中创建带有端点的 API 客户端?
- python-3.x - Python3:将 CSV 文件数据从 4 列排序为 2 列