回 帖 发 新 帖 刷新版面

主题:指针作为衍生数据类型的一个疑问

program test

  implicit none

  type data
     real ::  val
     type(data),pointer :: next
  end type data
  type(data) :: a, b
  
  ! -- BODY --
  allocate(a%next)
  a%next%val = 1.

  b = a
  b%next%val = 2.

  write(*,*) a%next%val, b%next%val

end program test



如以上测试程序,本意是a与b应独立的,输出结果为 1.   2.

但实际编译执行后输出结果是 2.    2.

为什么a与b就关联在了一起成了一样了,怎样使在“a=b”后仍保持a,b的相互独立?

回复列表 (共3个回复)

沙发

改成:
  allocate(a%next)
  a%next%val = 1.

  allocate(b%next)
  b%next%val = 2.

板凳

a和b 里的next指针指向了一个data类型,要给b里面的next指针赋一个新地址

3 楼

最好不要像楼主那样做,否则执行期会检查到next已经分配了内存,再分配会挂掉:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册