所以我试图回答一个关于 Project Euler 的问题(问题是:找到 10,001 质数),并遇到了一个我不知道为什么会发生的问题。当我运行以下 C++ 代码时,
#include <iostream>
using namespace std;
int main()
{
int arr[10001]={2}, term=1, i, num=3;
while(term!=10001)
{
for(i=0; i<term; i++)
{
if(num%arr[i]==0){
break;
}
}
if(i==term){
arr[term]=num;
cout<< arr[term]<< " is prime"<< endl;
term++;
}
num++;
}
cout<< arr[term]<< endl;
}
我总是得到 cout<< arr[term]<< endl;
打印出任何内容n++;
(在这种情况下是下一个数字,但如果我将其更改为 n=856
,那么它将打印出该数字)。我不明白为什么那个数组项会改变,因为我认为它只会在 arr[term]=num;
时改变。被执行
最佳答案
您的代码有 undefined behaviour 因为您正在访问其边界之外的数组。
当循环中断时,term
的值为 10001
,这是数组 arr
的第 10002 个元素,而您的数组内存已分配仅适用于 10001
元素。
要打印数组的最后一个元素,请执行:
cout<< arr[term - 1]<< endl;
关于素数搜索中的 C++ 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28392327/