C分段错误,同时在数组中生成素数

时间:2019-01-24 07:35:06

标签: c segmentation-fault primes

我编写了这段代码以在计算机上执行压力测试。实际上,它会生成所有质数,直到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的值,则会出现细分错误。我该怎么解决?

1 个答案:

答案 0 :(得分:2)

在堆栈中可以存储的数量是有限制的。代替这个

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"