0

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

2 回答 2

4

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

于 2014-09-04T22:15:31.517 回答
0

在此处输入图像描述

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

于 2014-09-04T22:22:11.147 回答