C / C ++の場合、メモリリーク、メモリ破損などを引き起こす可能性のあるユースケースをよく理解しています。しかし、Fortranについてはどうでしょうか。
2 に答える
Fortran でメモリ リークを作成する方法としては、ポインターの割り当てが間違いなく (そしておそらく唯一の明らかな) 方法であると言えます。
program test
implicit none
integer :: ii
integer, pointer :: leak(:)
do ii = 1, 10000000
allocate(leak(1000))
leak(:) = 0
end do
end program test
他の回答が述べているように、ポインターでメモリリークを引き起こす可能性があります。
メモリ破損を引き起こす明白な方法が 2 つあります。存在しない配列の要素に書き込むことができます:
real :: a (100)
a (101) = 3.0
呼び出しの引数と実際のサブルーチンの引数が一致しないサブルーチンを呼び出すこともできます。これを行うには多くの方法があります。
メモリの破損は、エラーが発生してからかなり時間が経ってから症状が現れる可能性があるため、または有益でないエラー (「セグメンテーション フォールト」など) を引き起こすため、厄介な場合があります。最新の Fortran、適切なコーディング、およびコンパイラーが提供する完全なエラー・チェック・オプションの使用により、前述の 2 つの方法が Fortran コンパイラーによって検出され、有益なメッセージが提供されます。実行時の添字チェックは、配列の存在しない要素への書き込みを検出します。インターフェイスをサブルーチンで明示的にすると、コンパイラはコンパイル時に、呼び出しとプロシージャの引数間の不一致を検出します。これを行う最も簡単な方法は、プロシージャ (サブルーチンと関数) をモジュールに入れ、それらのモジュールを使用することです。