1

配列を反復処理し、決定論的に新しい行ベクトルを作成し、それを配列に追加するプログラムがあります。

各反復でベクトルのノルムが取得され、ゼロ ベクトルではないことが保証されます。ゼロの場合、プログラムは停止します。

3 回目の反復でベクトルがゼロになるというバグがありました。

このバグを探すために、デバッグ用の print ステートメント、print *、"here"、this_var などをコードに入力しました。これらの print ステートメントの 1 つ (最新のベクトルのノルムを出力します) がプログラムを修正しました。

私は印刷ステートメントが好きではありません。また、何が起こっているのか理解できないのも好きではありません。

print ステートメントが印刷するものに影響を与える理由について誰か考えがありますか?

コード (最大 400 行、大量のコメント) が利用可能

4

4 に答える 4

3

James がコメントで指摘したように、これは配列のインデックス付けが原因である可能性があります。配列境界チェックを有効にしてコードを再コンパイルし (これを行うコマンドはコンパイラによって異なります)、プログラムを実行してください。

そして、あなたは絶対に正しいです - このような陰湿なエラーは絶対に腹立たしいです。

于 2010-08-12T18:30:19.987 に答える
1

範囲外のアクセスが原因でメモリを上書きしているようです。配列境界チェックをオンにしてコンパイルします。これによりプログラムの実行が遅くなりますが、メモリ違反を見つけることができます。

于 2010-08-14T19:33:23.080 に答える
0

かつて、これと同様の結果が得られたコンパイラまたはリンカに関係するエラーを見つけました。問題のコード行は複数のプログラムで同じであり、これを除いてすべて機能しました。この場合、問題の行は算術的でした。私がそれを複数の標準に変換したとき、それ以外の場合、それは正常に機能しました。これがエラーである可能性は非常に低いですが、私はそれをそこに出さなければなりません。
また、ティムの答えにプラスを付けなければなりません。コンパイラオプションが最も重要です。

于 2010-08-12T19:00:06.370 に答える
0

サブルーチンを使用しますか?

サブルーチンの一部のデータを上書きすると、反映されずに結果が失われることがあります。

サブルーチン呼び出しに正しい型がありますか?

インテントイン/アウトを使用していますか?

固定寸法を使用していますか?

于 2010-08-15T16:24:02.123 に答える