首页 > 解决方案 > 抛出未处理的异常:读取访问冲突。_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 的值似乎与错误不一致。

编辑:我发现了问题。我在数组中分配值的方式是错误的。

标签: c++

解决方案


推荐阅读