当类型为数组

时间:2017-06-12 04:32:34

标签: arrays fortran finalization

最近我发现了一个严重的问题,在某些情况下,终结功能不起作用。

说明

我定义了一个类型,比如TYPE(testtype):: T,其中使用了许多指针和可分配数组。还有一个终结子例程,比如final:: de。这个函数(de)工作正常(我把它写入来检查)。但是,当我定义一个数组TYPE(testtype),allocatable::T(:)时,在我使用它之后,当我de时,不会调用函数deallocate(T)。在这里,我提出了测试代码。可以检查,subdo1()运行良好(输出"work"),而subdo2()中的最终结果失败。

    module test1
        implicit none
        !--------------
        type testtype
          real(8)::x
        contains
          final::de
        end type
        !--------------
        contains
        subroutine de(self)
            type(testtype)::self
            write(*,*)"work"
        end subroutine
    end module

    subroutine subdo1()
        use test1
        implicit none
        class(testtype),pointer::t
        allocate(t)
        deallocate(t)
    end subroutine

    subroutine subdo2()
        use test1
        implicit none
        class(testtype),pointer::t(:)
        allocate(t(2))
        deallocate(t)
    end subroutine

    program test
        implicit none
        !call subdo1()
        call subdo2()
    end program

我尝试了gfortran和ifort(ifort版本17.0.0)

0 个答案:

没有答案