0

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

4 回答 4

1

这个:

aArray[i*SIZE_OF_DATA + j]

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

具有未定义行为的错误程序表现得非常...未定义。尽管没有看到更多代码,但没有人可以确定。

于 2012-10-26T00:36:36.733 回答
0

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

于 2012-10-26T03:45:46.373 回答
0

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

于 2012-10-26T00:33:54.373 回答
0

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

于 2012-10-26T00:33:44.060 回答