【发布时间】:2020-10-21 17:58:40
【问题描述】:
我在这里简化了我的代码。当我不 DEALLOCATE POINTER 时,代码中存在内存泄漏,这是合乎逻辑的。但是,问题是我不能 DEALLOCATE 指针。无效化也会导致内存泄漏。
PROGRAM pointer_allocation_deallocation
USE, INTRINSIC :: IEEE_arithmetic, ONLY: IEEE_selected_real_kind
INTEGER, PARAMETER :: pReal = IEEE_selected_real_kind(15,307)
INTEGER :: istat
INTEGER(pReal), DIMENSION(:,:), ALLOCATABLE, TARGET :: trgt1
INTEGER(pReal), DIMENSION(:,:), POINTER :: ptr1
DO i = 1,1000000
ALLOCATE(ptr1(100,100), STAT=istat)
WRITE(*,*) 'istat1 = ', istat
ALLOCATE(trgt1(10000,10000), STAT=istat)
WRITE(*,*) 'istat2 = ', istat
ptr1 => trgt1
DEALLOCATE(trgt1, STAT=istat)
WRITE(*,*) 'istat3 = ', istat
! DEALLOCATE(ptr1, STAT=istat)
! WRITE(*,*) 'istat4 = ', istat
ENDDO
ENDPROGRAM pointer_allocation_deallocation
【问题讨论】:
-
Fortran 的一个很好的一般规则是不要使用指针,使用可分配对象,因为它们的危险性要小得多。你真正想做什么?很可能有一种“更 Fortran”的方式来做这件事。
标签: pointers memory-leaks fortran