这真的很奇怪。这个程序在另一台计算机上运行正常,但是当我在这台计算机上试用它时它会永远运行。它也是一个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;
}
}
我担心我以某种方式破坏了我的程序...但我几乎没有做任何事情,只是添加评论!
答案 0 :(得分:1)
此:
aArray[i*SIZE_OF_DATA + j]
看起来你可能在最后一次迭代中在数组外部写cArray
和dArray
。你确定你正在获得正确的数组索引吗?如果没有,通过未定义行为的奇迹,你可能正在写入属于其他变量的内存,包括i
和j
,这可能使这个循环永远继续。
具有未定义行为的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>