0

これは本当に奇妙です。このプログラムは別のコンピューターで正常に動作していましたが、このコンピューターで試してみると、永久に実行されます。また、これはforループであり、混乱をさらに助長します。SIZE_OF_DATAはプリプロセッサ変数であり、問​​題を引き起こしている可能性があると思います。しかし、わかりません。printfを追加すると、外側のループの1回の反復のみが表示され、内側のループで無限にループしています。理由はわかりません。

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]

最後の反復で配列の外側(cArrayおよび)に書き込んでいるように見えます。dArray配列に正しいインデックスを取得していることを確認しますか?iそうでない場合は、未定義動作の驚異により、おそらく、およびを含む他の変数に属するメモリに書き込んでいるjため、このループが永久に続く可能性があります。

未定義の動作を持つバギープログラムは非常に...未定義で動作します。より多くのコードを見なければ、誰も確信が持てません。

于 2012-10-26T00:36:36.733 に答える
0

このコードをデバッグするための私のアプローチは、forループで値iとjを出力することです。おそらくSIZE_OF_DATA、これは問題ではないはずですが、コードの一部のブロックで意図せずに増加します。

于 2012-10-26T00:33:44.060 に答える
0

i * SIZE_OF_DATA + jを変数に設定してみてください。これが、問題の原因である可能性があります。

于 2012-10-26T00:33:54.373 に答える
0

'j'のデータ型について教えてください。'j'のデータ型がcharで、'SIZE_OF_DATA'マクロの値が150のようなものであると仮定すると、'j'の値は-128から127の間で繰り返されます。したがって、無限に実行されます。

于 2012-10-26T03:45:46.373 に答える