我有一个生成素数的程序。当我需要前100个和200个素数时,此代码工作正常,但每当我使用大于300的值时,就会发出浮点异常。问题似乎在阵列中,但我不明白发生了什么。
#include<stdio.h>
int main()
{
int total = 500;
int primes[total];
primes[0] = 2;
int max = 1;
int current = 3;
int index = 0;
printf("%d\n",2);
while(max != total)
{
for(index = 0; index <= max + 1; index++)
{
if(index == max + 1){
primes[index] = current;
printf("%d\n",current);
max = max + 1;
current = current + 1;
break;
} else {
if(current % primes[index] == 0){
current = current + 1;
break;
}
}
}
}
}
答案 0 :(得分:4)
您必须确保表达式current % primes[index]
永远不会使用0
的{{1}}值进行评估。作为primes[index]
运算符的右操作数的0
值调用C中的未定义行为。
答案 1 :(得分:0)
你的访问超出了primes []的末尾,在调试器中你写了primes [index],其中index == 500 .. primes [500]不存在