在数组中生成素数时出现 C 分段错误
C segmentation error whiler generating prime numbers in an array
我写这段代码是为了在我的电脑上进行压力测试。它实际上生成所有质数,直到 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
returns 和 int
,所以把它放在后面:
return 0; // 0 usually means "program execution was successful"
我写这段代码是为了在我的电脑上进行压力测试。它实际上生成所有质数,直到 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
returns 和 int
,所以把它放在后面:
return 0; // 0 usually means "program execution was successful"