c++ - 运行时检查失败 #2 - 变量 "primes"周围的堆栈已损坏

标签 c++ arrays runtime-error

我已经查看了几乎所有其他运行时检查失败 #2 问题,只有 1 个将错误应用到与我的程序相同的位置。如评论所述,错误发生在我结束 main() 之后。我没有分配超过数组末尾的内容,并且在 main 返回后也没有更改任何内容。

#include <iostream>

void findPrimes(bool primes[], const int arrSize);
int main(){
    const int arrSize = 1000;
    bool primes[arrSize];
    for (int x = 0; x < arrSize; x++){
        primes[x] = true;
    }
    findPrimes(primes, arrSize); //sets all non-prime numbers to false
    for (int x = 0; x < arrSize; x++){ //I did not go past the size of the array.
        if (primes[x]){
            std::cout << x << std::endl;
        }
    }
    return 0; //Error occurs after this point.
}

void findPrimes(bool primes[], const int arrSize){ //detects and changes non-prime numbers to false
    int temp;
    for (int x = 2; x < arrSize; x++){
        temp = x + x;
        for (int c = 0; c < arrSize; c++){
            if (temp > arrSize){
                break;
            }
            primes[temp] = false;
            temp += x;
        }
    }
}

最佳答案

你的测试

if (temp > arrSize){
        break;
}

走在正确的轨道上,以确保您不会超出数组边界,但存在一个差一错误,因为索引 arrSize 不是有效的数组索引,但不会此时不会导致循环中断。将此更改为阅读

if (temp >= arrSize){
        break;
}

看看是否能解决问题。

关于c++ - 运行时检查失败 #2 - 变量 "primes"周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34146255/

相关文章:

php - 错误:函数 Campaign::camp_detls() 的参数太少,0 恰好传递了 1 预期值

javascript - 从由 Id Vuejs 过滤的数组中删除对象

arrays - 在 Struts 2 中将字符串数组作为静态参数传递

python - Matplotlib-动画 "No MovieWriters Available"

c++ - C++父子进程共享队列

c - 将指针传递给多维数组

java - GWT 2.8.2编译器异常

c++ - cocos2d CCLayer.m UIAccelerometer 已弃用警告

c++ - QStandardItemModel 获取 child 的模型

c++ - 为什么我在 C++ 中收到针对此基于范围的 for 循环的警告?