首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用指向多个目标的相同指针时发生内存泄漏

使用指向多个目标的相同指针时发生内存泄漏
EN

Stack Overflow用户
提问于 2018-06-03 05:07:31
回答 1查看 248关注 0票数 0

我的IDE是集成了英特尔Fortran编译器的Visual Studio 2010。编译器的版本为: Intel Parallel Studio XE 2011。

我不是一个有经验的Fortran程序员,所以我需要一点帮助来使用指针从.txt文件中读取数据。这是我的示例代码:

代码语言:javascript
运行
复制
Module Derived_type

implicit none

Type , public :: Something

  private

       Real :: Somth_1
    Integer :: Somth_2

  contains

    procedure , public :: read_input => read_data_input
    procedure , public :: t_Somth_1 => t_data_Somth_1
    procedure , public :: t_Somth_2 => t_data_Somth_2

End Type Something

private :: read_data_input
private :: t_data_Somth_1 , t_data_Somth_2

contains

Subroutine read_data_input( This , Un_r )

  Class( Something ) :: This
  Integer , intent( in ) :: Un_r

  Read ( Un_r , * , Err = 100 ) This%Somth_1
  Read ( Un_r , * , Err = 101 ) This%Somth_2

Return

100 Stop ( "Read format error - 100 !!!" )
101 Stop ( "Read format error - 101 !!!" )

End Subroutine read_data_input

Function t_data_Somth_1 ( This ) result( data_Somth_1 )

  Class( Something ) :: This
  Real :: data_Somth_1

  data_Somth_1 = This%Somth_1

End Function t_data_Somth_1

Function t_data_Somth_2 ( This ) result( data_Somth_2 )

  Class( Something ) :: This
  Integer :: data_Somth_2

  data_Somth_2 = This%Somth_2

End Function t_data_Somth_2

End Module Derived_type

Program Memory_leaking

Use , non_intrinsic :: Derived_type

Implicit none

Integer :: i , alloc_err , dealloc_err
Integer , parameter :: N_snv = 3
Character( 256 ) :: Name
Character(*),parameter :: a00 = '("Input_",i1,".txt")'

Class( Something ) , pointer :: Po_Something

Type( Something ) , allocatable , target :: Tar_Something(:)

! Memory allocation

allocate ( Po_Something , Stat = alloc_err )

If ( alloc_err .ne. 0 ) Stop ( "Allocation wrong - Po_Something !!!")

If ( .not. allocated ( Tar_Something ) ) allocate( Tar_Something( N_snv ) , stat = alloc_err )

If ( alloc_err .ne. 0 ) Stop ( "Allocation wrong - Tar_Something !!!")


Do i = 1 , N_snv

   Po_Something => Tar_Something(i)

   Write( Name , a00 ) i

   Open( 15 , File = Name , Status = 'Unknown' , Action = 'Read' )

      Call Po_Something%read_input( 15 )

   Close( 15 , Status = 'Keep' )

   Write(*,*) Po_Something%t_Somth_1() , Po_Something%t_Somth_2()

End Do

! Memory deallocation

deallocate ( Po_Something , Stat = dealloc_err )

If ( dealloc_err .ne. 0 ) Stop ( "deAllocation wrong - Po_Something !!!")

If ( allocated ( Tar_Something ) ) deallocate( Tar_Something, stat = dealloc_err )

If ( dealloc_err .ne. 0 ) Stop ( "deAllocation wrong - Tar_Something !!!")

End program Memory_leaking

我有一个派生类型的数组,我想使用相同的指针从.txt文件中读取每个数组的数据,就像我的示例代码中一样。在循环执行完成后,是否需要中断连接节拍指针和目标?这种情况下是否存在内存泄漏?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50661177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档