作者:菜蕻的薇笑2602929033 | 来源:互联网 | 2023-08-14 11:50
Please take a look at this C code. It is a small program I've written, which takes a number n as input and calculates all prime numbers from 2 to n. It works fine when n<100, but if I put in 1000 or more it crashes. I can't figure out why, since the array, in which the numbers are stored is dynamically allocated, so lack of memory shouldn't be a problem.
请看一下这个C代码。这是我编写的一个小程序,它以n为输入,计算从2到n的所有素数。当n <100时它工作正常,但如果我输入1000或更多,它会崩溃。我无法弄清楚为什么,因为存储数字的数组是动态分配的,所以缺少内存应该不是问题。
So, why does the program crash on large inputs?
那么,为什么程序会在大输入上崩溃?
Also, I apologize for the bad readability of the code. I'm just starting out with programming.
另外,我为代码的可读性差而道歉。我刚刚开始编程。
code
#include
#include
int main()
{
int i;
int n;
int *array = malloc((n-1)*sizeof array);
int q = 0;
int k;
int *array2;
printf("Geben Sie eine natuerliche Zahl n ein: ");
scanf("%d", &n);
printf("\n");
for(i=0; i<=n-2; i++){
array[i] = i+2;
}
while(q<=n-2){
while(array[q]==0&&q<=n-2){
q++;
}
for(i=q+1; i<=n-2; i++){
if(array[i]%array[q]==0){
array[i] = 0;
}
}
q++;
}
PART1:
for(i=0; array[i]!=0; i++){
if(array[i+1]==0){
int j;
for(j=i+1; j<=n-2; j++){
if(array[j]!=0){
array[i+1] = array[j];
array[j] = 0;
goto PART1;
}
}
k = i;
goto PART2;
}
}
PART2:
*array2 = malloc((k+1)*sizeof array2);
for(i=0; i<=k; i++){
array2[i]=array[i]; //Here's where the program crashes
}
free(array);
for(i=0; i
codeblocks debugger says: program received signal SIGSEGV , Segmentation fault, at line 53. I marked it in the code.
codeblocks调试器说:程序接收信号SIGSEGV,分段错误,在第53行。我在代码中标记了它。
1 个解决方案