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 (将#修改为@)