1

最近、Mac OS で正常に動作する Fortran コードを入手しました。このコードと入力ファイルは、後でコンパイルするために送信されました。同じコードと同じ入力ファイルを正確に使用しましたが、「配列の境界を超えました」というエラーが表示されました。Windows XP で CVF 6.6 を使用しています。私は次のことを知りたかった:

  1. これはコンパイラまたは OS の問題ですか?
  2. それらをコンパイルするために Mac OS を手配しましょうか。
  3. インターネットでたくさんサーフィンした後、データを「フォーマットフリー」にするのが賢明だと思います。しかし、データが 1 つの列に時間があり、2 番目の列に電圧がある時系列である場合、それを行う方法はありません。
4

1 に答える 1

1

エラーメッセージarray bounds exceededは常に(私が思うに)、コードが配列の境界外の配列要素、たとえば24個の要素を持つ配列の要素25にアクセスしようとしたことを示します。これは実行時にのみ発生する可能性があり、コンパイラ/ランタイムは、コンパイル時に配列境界チェックのコンパイラオプションを設定した場合にのみ検出されます。コンパイラのドキュメントには、これらのオプションが何であるかが記載されています。

エラーメッセージには、プログラムのどこでエラーが発生したか、および範囲外の配列アクセスのインデックスを示す情報が含まれている必要があります。

ソースコードと入力データが同一で​​あるとすると、これはどのようにして発生したのでしょうか。2つの異なるプラットフォームでプログラムをコンパイルしたため、コンパイルを同一にすることはできません。MacとWindowsPCで配列境界チェックがオフになっている可能性があります。

範囲外の配列要素にアクセスしても、Fortranプログラムは明らかに正常に実行される可能性があります。24個のうち25個の配列要素のメモリアドレスが意味のある値を保持し、そのアドレスがプログラムのスペース内にある場合、計算は続行される可能性があります。それも役に立たない可能性がありますが、それを見つける前に何年も行くことができます。

Macに戻り、配列境界チェックを使用して再コンパイルし、再度実行して、何が起こるかを確認することをお勧めします。

XPとMacでは、ファイルを読み取るルーチンが異なる数の値を検出する可能性もあります。これは、入力ファイルの末尾に改行があるかどうかに関係なく、行末の文字が異なることが原因である可能性があります。これもチェックしてください。

于 2013-02-12T11:34:32.543 に答える