C 分割错误,而 r 在数组中生成素数



我写这段代码是为了在我的电脑上执行压力测试。它实际上生成所有素数,直到 MAXX 定义的值。

#include <stdio.h>
#include <math.h> 
#include <omp.h>
#define MAXX 2059000
int main() {
    int primes[MAXX];
    primes[0] = 3;
    int entry=1; 
    for (int test=5; test < MAXX; test+=2){
        int flag=1; //assumed prime
        for (int div=0; primes[div] < sqrt(test); div++){
            if(test % primes[div] ==0){
                flag = 0;
                break;      
            }           
        }
        if (flag==1){
        primes[entry]=test;
        entry++;
        printf("%d n", test);
        }
    }

如果我增加 MAXX 的值,我会得到一个分段错误。我该如何解决?

堆栈上可以拥有的数量是有限制的。取而代之的是这个

int primes[MAXX];

你可以试试这个:

int *primes = malloc(MAXX * sizeof(int));
if (primes == NULL){
    printf("%Error: Out of memory.n");
    return 1;
}

现在它不是在堆栈上分配的,而是在堆上分配的。在程序结束时,再次释放内存:

free(primes);

当你在它的时候,请记住main返回一个int,所以把它放在后面:

return 0; // 0 usually means "program execution was successful"

相关内容

  • 没有找到相关文章

最新更新