为什么递增一个数组,增加另一个?

时间:2015-11-18 23:13:57

标签: c++ arrays increment

我在增加数组中的单个项目时遇到问题。它最终增加了另一个数组..它是如何做到的?这就是我所拥有的:

string simulateFIFO(darray<int> requests, int frameSize) {

string results;

int currentPages[frameSize];
int timer[frameSize];

int hits = 0;
int faults = 0;

cout << "STARTING FIFO" << endl;

for (int i = 0; i < requests.size(); i++) {
    cout << requests[i] << " ";
}
cout << endl;
cout << endl;

for (int i = 0; i < frameSize; i++) {
    currentPages[i] = -1;
    timer[i] = 0;
}

// Start Calculations
for (int i = 0; i < requests.size(); i++) {

    bool requestSet = false;

    for (int j = 0; j < frameSize; j++) {

        if (currentPages[j] < 0) {
            // Current frame does not have a page
            cout << "FRAME IS EMPTY" << endl;

            currentPages[j] = requests[i];

            requestSet = true;
            faults++;

            j = frameSize;
        }
        else if (currentPages[j] == requests[i]) {
            cout << "FRAME IS SAME AS REQUEST" << endl;
            // Current Frame is set the the page being requested

            timer[j] = 0;

            requestSet = true;
            hits++;

            j = frameSize;
        }

        cout << currentPages[j] << endl;

        timer[j]++;

        cout << currentPages[j] << endl;

    }

    // Check to see if a request was set or not
    if (requestSet == false) {
        cout << "FRAME NEEDS REPLACED" << endl;
        // The request wasnt set. Determine which frame to replace with the new request
        int lastUsed = 0;
        int lastUsedIndex = 0;

        for (int j = 0; j < frameSize; j++) {

            if (timer[j] > lastUsed) {
                lastUsed = timer[j];
                lastUsedIndex = j;
            }
        }

        currentPages[lastUsedIndex] = requests[i];
        //timer[lastUsedIndex] = 0;

        faults++;
    }

    cout << "HEY 3: " << currentPages[0] << endl;

    cout << "NEW FRAME: ";
    for (int j = 0; j < frameSize; j++) {
        cout << currentPages[j] << " ";
    }
    cout << endl;
    cout << endl;

}

cout << "FIFO" << endl;
cout << faults << endl;
cout << hits << endl;
cout << endl;

return results;

}

我的输出结束

0
1

为什么增加一个数组实际上也会增加另一个?

1 个答案:

答案 0 :(得分:2)

您的代码包含可能的执行路径:

timer[j]++;

接着是

frameSize

这访问了界限:对于维度为0的数组,有效索引为frameSize-1j = frameSize;

我猜你其实想要退出循环;如果是,请将break;替换为int timer[frameSize];

NB。 ISO C ++中不允许{{1}};必须在编译时知道数组边界。您的代码依赖于编译器扩展。