如何解决final是否必须是元素或编译器中的错误
在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 举报,一经查实,本站将立刻删除。