素数打印机功能,在传递足够大的数字时崩溃

时间:2011-09-04 19:12:48

标签: c arrays crash c99

我有这段代码可以将素数打印到屏幕上。

例如,printPrimes(500000)将填满屏幕,所有素数最多为500000(即7368787)。

问题是,传递600000或1000000这样的较大数字会破坏程序。

有什么想法吗?提前谢谢。

typedef enum {false, true} bool;

bool isPrime(long number, long primes[], long n) {
    int divisor, index;
    for (index = 0; index < n; ++index) {
        divisor = primes[index];
        if (divisor * divisor > number) {
            return true;
        } else if (number % divisor == 0) {
            return false;
        }
    }
    return 0;
}

void printPrimes(long n) {
    long primes[n];
    long odd, index;
    primes[0] = 2;
    odd = 1;
    index = 1;
    while (index < n) {
        odd += 2;
        if (isPrime(odd, primes, n)) {
            printf("%ld ", odd);
            primes[index] = odd;
            ++index;
        }
    }

}

1 个答案:

答案 0 :(得分:6)

下面:

long primes[n];

如果n足够大(堆栈非常小),那么堆栈就会溢出。请尝试使用malloc

long *primes = malloc(sizeof(*primes) * n);