私は非常に優れたプログラマーではなく、データをポインタとして提供するモデルとのインターフェースをとろうとしています。これらのポインタは、データが書き込まれる前にいくつかのサブルーチンに渡されます。私はメモリリークを避けるためにこれを行う方法がわかりません。多くのサブルーチンにポインタを渡す適切な方法
アレイポインタA
が書き込まれる前にいくつかのサブルーチンに渡されているとします。宣言、割り当て、および割り当てをどのように処理しますか?
module data
implicit none
contains
subroutine s1(a)
real, pointer, intent(out) :: a(5,5)
call s2(a)
end subroutine s1
subroutine s2(a)
real, pointer, intent(out) :: a(5,5)
integer :: i
do i = 1,5
a(:,i) = 5.0
end do
end subroutine s2
end module data
Program test
use data, only : s1, s2
real, pointer, dimension(:,:) :: A => NULL()
allocate(A(5,5))
call s1(A)
write(*,*) A
deallocate(A)
end Program test
を見つけることが私はあなたが求めているものを全くわからないんだけど、あなたのコードに問題がある場合、それはおそらく '意図(アウト)'属性に関連していますそれらのポインタの。たとえば、[この関連する質問](https://stackoverflow.com/q/29737367)を参照してください。または、いわゆる_explicit shape_nature(ポインタと競合する)。 – francescalus
ディメンションは一度だけ指定する必要があります。サブルーチンでは、次のように宣言する必要があります。 'real、pointer、dimension(:, :)、intent(out):: a' '' deallocate(A) 'の後にポインタを必要としなくなった場合、' 'nullify(A)' 'を実行することができます。 –