作者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