6

現在、Fortran で小さなサブルーチンをコーディングして、プログラムがエラー (ファイルのロードに失敗した、または必要なファイルが存在しない) に遭遇したときに、メモリ内の割り当てられたすべての変数の割り当てを解除しようとしています。この時点で、実行を終了する必要がありますが、すべてのアロケータブルが必ずしも割り当てられるわけではありません (コードのどこでエラーが発生したかによって異なります)。

私の現在のアプローチは次のとおりです。

SUBROUTINE Cleanup(A)

    REAL(8), ALLOCATABLE, DIMENSION(:) :: A

    IF (ALLOCATED(A)) THEN
        DEALLOCATE(A)
    END IF

END SUBROUTINE

すべてのアロケータブルに対して「クリーンアップ」を呼び出します。これに関する問題は、すべての変数が次元 1 ではないことです。そのうちのいくつかには最大 3 つの次元があります。

最初に、異なる次元に対して 3 つの異なるサブルーチンを作成し、オーバーロードを使用することを考えましたが、これはあまりエレガントではないようです。

次に、実際の引数Aの代わりにポインターを渡すことができるかもしれないと思いましたが、ググったところ、ポインターを介してターゲット変数の割り当てを解除できないようです。

これを適切に行う方法についてのアイデアはありますか?

ありがとう。

4

1 に答える 1