先日のアップしたプログラムを書いた際に初めてメモリリークという壁にぶち当たりました。 fortranでメモリリークって無いだろと思ってましたが、結構あるみたいです。
例えば、
http://jjoo.sakura.ne.jp/tips/f90/memory_leak.html
ただし、今回陥ったものは、ifortだと問題なかったので、gfortranのバグっぽいですが、メモが代わりにまとめておきます。 下記のようにsubroutine内でポインタの配列を複製を作ると解放出来なくってしまいました。
subroutine test(pA) type(c), pointer :: pA(:) !引数:構造体cの配列 type(c), pointer :: p(:) => null() !ローカル変数 allocate(p, source = pA) !pAのコピーをアロケート !処理を実行 deallocate(p) !pが開放されない。 end subroutine
全く原因が不明です。