因此,这是代码,它的工作非常好,直到4-5位数。
int main()
{
int x;
printf("Enter a number: ");
scanf("%d", &x);
double list[x];
int i;
for(i=0;i<x;i++){
list[ i ] = i+1;
}
double z;
int q;
double list2[x];
for(q=0;q<x;q++){
z=x/list[q];
if (z == floor(z)){
list2[q] = z;
}
else {
list2[q] = 0;
}
}
printf("\n--------------\n");
int n;
double nulla = 0.00000000;
int zero = 0;
for(n = 0; n < x; n++)
{
if (fabs(list2[n]-0.00)==0.00){
zero++;
}
}
if(zero == x-2){
printf("It is a prime number");
}
else{
printf("It is not a prime number");
}
printf("\n--------------\n");
return 0;
}但是如果我输入例如987521。它给出了这样的信息:Process returned -1073741571 (0xC00000FD)和我一直在想,也许数组不能存储这么大的数据,但也许我错了。有什么想法吗?
发布于 2021-12-20 23:49:13
而不是像在行中那样在堆栈上分配内存。
double list[x];使用动态分配,如
double* list = malloc(x * sizeof(double));然后,在程序结束之前,不要忘记释放:
free(list);原因是堆栈分配通常在大小上是非常有限的(MBs的顺序),并且当您分配超过这个限制时,堆栈就会溢出。另一方面,动态内存(堆)受操作系统的限制,通常是相当大的(受操作系统或物理+虚拟内存总量的限制)。
https://stackoverflow.com/questions/70429176
复制相似问题