引发未处理的异常:读取访问冲突。 _Pnext为0xC

时间:2020-05-07 08:37:12

标签: c++

我正在为类编写一个程序,该程序基本上运行1000次页面替换算法,以显示平均页面错误更少。我的问题是我从xmemory收到一个错误。 enter image description here

将代码缩小到始终出现错误的区域。 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的迭代和帧的值似乎与该错误不一致。

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

0 个答案:

没有答案