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

Swe*_*l17 0 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;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 6

这里:

long primes[n];
Run Code Online (Sandbox Code Playgroud)

如果n足够大(堆栈非常小),则堆栈溢出.请尝试使用malloc.

long *primes = malloc(sizeof(*primes) * n);
Run Code Online (Sandbox Code Playgroud)