[問題] pointer串列的問題

看板Fortran作者 (DMRG)時間14年前 (2010/11/22 21:57), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
我有數據產生時用這樣的資料結構儲存, 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

11/23 00:29, , 1F
沒這樣用過 但是看起來指標如果沒有動態配置的話應該是
11/23 00:29, 1F

11/23 00:29, , 2F
不會被釋放掉!? 也許><
11/23 00:29, 2F

11/23 00:59, , 3F
有一個nullify可以使用 但是它是取消與目標的關聯性
11/23 00:59, 3F

11/23 01:00, , 4F
取消有沒有等於釋放不清楚 另一種就是跟allocate一樣
11/23 01:00, 4F

11/23 10:58, , 5F
若每個pointer都是allocate出來,就要逐個deallocate
11/23 10:58, 5F

12/04 17:34, , 6F
謝謝。
12/04 17:34, 6F
文章代碼(AID): #1CwdRZ9T (Fortran)
文章代碼(AID): #1CwdRZ9T (Fortran)