gpt4 book ai didi

无能为力 : Infinite Loop in C

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:00 26 4
gpt4 key购买 nike

我正在研究 Eratostenes 查找素数方法的 c 实现,但我遇到了一个非常奇怪的错误。

int* criba(int n){

int *array;
int i,j,k,valor;
array = malloc(n*sizeof(int));

for (i=0;i<=n-2;i++){
array[i]=i+2;
}

for (j=0;j<n-2;j++){
valor = array[j];
for (k=1;valor*k+j<n-2;k++){

printf("%d \n",array[valor*k+j]);

}
}
}


return array;
}

这按预期工作,它创建一个 n-2 大小的数组,包含从到 2 到 n 的所有数字,然后它检查每个值并在数组中打印它的所有倍数(Eratostenes方法从2开始寻找一个数的所有倍数并在中标记它们,然后转到下一个未标记的数字,之后所有未标记的数字都是素数)

问题是,当我试图将数字归零以“标记”它们时,我无缘无故地陷入了循环:

int* criba(int n){

int *array;
int i,j,k,valor;
array = malloc(n*sizeof(int));

for (i=0;i<=n-2;i++){
array[i]=i+2;
}

for (j=0;j<n-2;j++){
valor = array[j];
for (k=1;valor*k+j<n-2;k++){
if (array[valor*k+j] != 0){
printf("%d \n",array[valor*k+j]);
array[valor*k+j] = 0;
}
}
}


return array;
}

事实上,唯一的问题是 array[valor*k+j] = 0;,如果我删除该程序成功返回,但该行卡住了,我不能找出原因。非常感谢任何帮助。

最佳答案

显然在某个时刻valor = array[j];将使valor等于 0 , 所以循环中的条件 valor*k+j < n-2;将永远为真,因此无限循环。

关于无能为力 : Infinite Loop in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23052083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com