微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

final是否必须是元素或编译器中的错误

如何解决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 举报,一经查实,本站将立刻删除。