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

Fortran中指针的内存泄漏

如何解决Fortran中指针的内存泄漏

在这里简化了我的代码。当我不取消分配POINTER时,代码中有内存泄漏,这是合乎逻辑的。但是,问题是我无法取消分配指针。无效化还会导致内存泄漏。

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),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,*) 'istat3 = ',istat

  ! DEALLOCATE(ptr1,STAT=istat)
  ! WRITE(*,*) 'istat4 = ',istat
ENDDO

ENDPROGRAM pointer_allocation_deallocation

解决方法

您使用语句ptr1 => trgt1创建了内存泄漏,因为无论如何您都无法访问ptr1先前指向的内存。您应该在此赋值语句之前取消分配ptr1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。