[英]Why is this for loop infinitely looping? (C)
这真是奇怪。 该程序可以在另一台计算机上正常工作,但是当我在该计算机上尝试该程序时,它将永远运行。 这也是一个for循环,这使我更加困惑。 SIZE_OF_DATA是一个预处理器变量,我认为这可能是导致问题的原因。但是我不知道。 当我添加一个printf时,它仅显示外部循环的一个迭代,并且在内部循环中无限循环。 我不知道为什么。
for(i=0; i<size; i++){
for(j=0;j<SIZE_OF_DATA; j++){
aArray[i*SIZE_OF_DATA + j] = aPointer[i]->b[j];
cArray[i*SIZE_OF_DATA + j] = 0;
dArray[i*SIZE_OF_DATA + j] = i*SIZE_OF_DATA + j;
if (i==0)
eArray[j] = 0;
}
}
我担心我以某种方式破坏了我的程序……但是除了添加注释之外,我几乎什么都没做!
这个:
aArray[i*SIZE_OF_DATA + j]
您似乎阵列(外写cArray
和dArray
太)在最后一次迭代。 您确定要在数组中获得正确的索引吗? 如果不是这样,那么通过未定义行为的奇迹,您可能正在写入属于其他变量(包括i
和j
内存,这可能会使该循环永远持续下去。
具有未定义行为的Buggy程序的行为非常...未定义。 尽管没有看到更多代码,但没人能确定。
我调试这段代码的方法是在for循环中打印值i和j。 也许SIZE_OF_DATA
在您的某些代码段中无意中增加了,尽管这无关紧要。
尝试将i * SIZE_OF_DATA + j设置为变量,这可能就是您的问题所在。
能否请您提及“ j”的数据类型。 我假设如果'j'的数据类型为char并且您的'SIZE_OF_DATA'宏的值是150,那么'j'的值将在-128到127之间迭代。因此它将无限运行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.