尝试查找素数的浮点异常

时间:2014-09-04 22:12:42

标签: c arrays primes floating-point-exceptions

我有一个生成素数的程序。当我需要前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;
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:4)

您必须确保表达式current % primes[index]永远不会使用0的{​​{1}}值进行评估。作为primes[index]运算符的右操作数的0值调用C中的未定义行为。

答案 1 :(得分:0)

enter image description here

你的访问超出了primes []的末尾,在调试器中你写了primes [index],其中index == 500 .. primes [500]不存在