作者YCTzeng (DMRG)
看板Fortran
标题[问题] pointer串列的问题
时间Mon Nov 22 21:57:53 2010
我有数据产生时用这样的资料结构储存,
integer(
4) :: N
type link
real(
8) :: a
type(link),
pointer :: next
end type
type(link),
dimension(:),
allocatable :: H
type(link),
pointer :: p
N=
1234567 ! 计算N的大小,假设N=1234567
allocate(H(N))
然後开始产生数据,数据做好之後会像这样的结构,
┌─┐ ┌─┐ ┌─┐
H(1)│%a╞>│%a╞>│%a╞>null()
└─┘ └─┘ └─┘
┌─┐ ┌─┐
H(2)│%a╞>│%a╞>null()
└─┘ └─┘
...
┌─┐ ┌─┐ ┌─┐ ┌─┐
H(N)│%a╞>│%a╞>│%a╞>│%a╞>null()
└─┘ └─┘ └─┘ └─┘
数据产生出来就复制到另一个阵列去,然後把 H(:) 杀掉,
deallocate(H)
这样的subroutine会一直重复很多次,我的问题是:
是不是我只要 deallocate(H) 就可以把所有的记忆体都释放出来?
还是我必须把每一个H(1),H(2),...,H(N)里面每一个pointer都deallocate?
我担心的问题是这个subroutine重复做了很多次之後,会不会有愈来愈多
记忆体不能用?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.251.193.212
1F:→ charlesdc:没这样用过 但是看起来指标如果没有动态配置的话应该是 11/23 00:29
2F:→ charlesdc:不会被释放掉!? 也许>< 11/23 00:29
3F:→ charlesdc:有一个nullify可以使用 但是它是取消与目标的关联性 11/23 00:59
4F:→ charlesdc:取消有没有等於释放不清楚 另一种就是跟allocate一样 11/23 01:00
5F:推 Semisphere:若每个pointer都是allocate出来,就要逐个deallocate 11/23 10:58
6F:→ YCTzeng:谢谢。 12/04 17:34