问题描述
在ifort的documentation中说
如果要定型的实体是一个数组,则该数组每个元素的每个可定型组件都将分别定型。
没有任何关于elemental
的必要信息。
但是如果我有一个可终结组件的向量,那么如果final
过程未声明为Elemental的话,就会发生内存泄漏。 (valgrind
正在报告内存泄漏。)
module vector_mod
implicit none(type,external)
private
public :: Vector_t
type :: Vector_t
real,pointer :: X(:) => null()
contains
procedure :: init
final :: finalize
end type
contains
subroutine init(this,n,val)
class(Vector_t),intent(out) :: this
integer,intent(in) :: n
real,intent(in) :: val
allocate(this%X(n),source=val)
end subroutine
! If this elemental is missing I get memory leaks in
! - gfortran 7.5.0
! - ifort 19.1.1.217
elemental subroutine finalize(this)
type(Vector_t),intent(inout) :: this
if (associated(this%X)) deallocate(this%X)
end subroutine
end module
program test_final_intentout
use vector_mod,only: Vector_t
implicit none(type,external)
block
type(Vector_t),allocatable :: vectors(:)
integer :: i
allocate(vectors(3))
do i = 1,size(vectors)
call vectors(i)%init(i,1.)
end do
end block
end program
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)