趣味で計算流砂水理

Computational Sediment Hydraulics for Fun

ポインタとメモリリークについて

先日のアップしたプログラムを書いた際に初めてメモリリークという壁にぶち当たりました。 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

全く原因が不明です。

今後c++で書くことを考えると、メモリリークは十分に注意しないといけないと思いました。