运行-time Check Failure #2 - 变量 "primes" 周围的堆栈已损坏
Run-time Check Failure #2 - Stack around the variable "primes" was corrupted
我已经查看了几乎所有其他 运行-time Check Failure #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
不是有效的数组索引但不会此时导致循环 break
。将其更改为阅读
if (temp >= arrSize){
break;
}
看看是否能解决问题。
我已经查看了几乎所有其他 运行-time Check Failure #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
不是有效的数组索引但不会此时导致循环 break
。将其更改为阅读
if (temp >= arrSize){
break;
}
看看是否能解决问题。