1

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

描述:

我定义了一个类型,比如说TYPE(testtype):: T,其中使用了许多指针和可分配数组。还有一个终结子程序,比如说final:: de。这个函数 ( de) 工作正常(我把 write 放进去检查)。但是,当我定义一个数组时 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)

4

0 回答 0