为什么这个for循环无限循环? (C)

时间:2012-10-26 00:27:53

标签: c arrays for-loop infinite-loop

这真的很奇怪。这个程序在另一台计算机上运行正常,但是当我在这台计算机上试用它时它会永远运行。它也是一个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;
    }
  }

我担心我以某种方式破坏了我的程序...但我几乎没有做任何事情,只是添加评论!

4 个答案:

答案 0 :(得分:1)

此:

aArray[i*SIZE_OF_DATA + j]

看起来你可能在最后一次迭代中在数组外部写cArraydArray。你确定你正在获得正确的数组索引吗?如果没有,通过未定义行为的奇迹,你可能正在写入属于其他变量的内存,包括ij,这可能使这个循环永远继续。

具有未定义行为的Buggy程序表现得非常......未定义。虽然没有看到更多代码,但没人能确定。

答案 1 :(得分:0)

我调试这段代码的方法是在for循环中打印值i和j。可能SIZE_OF_DATA在代码的某些块中无意中增加,尽管这不重要。

答案 2 :(得分:0)

尝试将i * SIZE_OF_DATA + j设置为变量,这可能是您的问题所在。

答案 3 :(得分:0)

请你提一下'j'的数据类型。我假设如果假设'j'的数据类型是char并且'SIZE_OF_DATA'宏的值是150之类的话那么'j'的值将在-128到127之间迭代。所以它将无限运行< / p>