【问题标题】:Why is this for loop infinitely looping? (C)为什么这个for循环无限循环? (C)
【发布时间】:2012-10-26 00:27:52
【问题描述】:

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

我担心我以某种方式破坏了我的程序...但我几乎什么都没做,只是添加了 cmets!

【问题讨论】:

  • 您的SIZE_OF_DATA 是如何定义的?
  • 不仅如此,j 是如何定义的?
  • SIZE_OF_DATA 定义为等于 10 的预处理器变量。J 只是定义为 int。
  • 如果在内循环中使用 printf(j) 会产生什么结果?
  • 其实我想通了。我的一个数组确实超出了范围(由于舍入错误中的一个元素)。看起来我的 i 和 j 只在某些输入中被破坏,这就是为什么我在一台计算机上得到错误而在另一台计算机上没有。

标签: c arrays for-loop infinite-loop


【解决方案1】:

这个:

aArray[i*SIZE_OF_DATA + j]

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

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

【讨论】:

    【解决方案2】:

    我调试这段代码的方法是在 for 循环中打印 i 和 j 的值。也许SIZE_OF_DATA 在您的某些代码块中无意增加,尽管这无关紧要。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        能否请您提及“j”的数据类型。我假设如果假设'j'的数据类型是char并且'SIZE_OF_DATA'宏的值是150。那么'j'的值将在-128到127之间迭代。所以它将无限运行

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-17
          • 2020-08-08
          • 1970-01-01
          • 1970-01-01
          • 2016-07-27
          • 2017-09-21
          相关资源
          最近更新 更多