最近我发现了一个严重的问题,在某些情况下,终结功能不起作用。
说明
我定义了一个类型,比如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)