看板 Fortran 關於我們 聯絡資訊
我有數據產生時用這樣的資料結構儲存, 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
charlesdc:沒這樣用過 但是看起來指標如果沒有動態配置的話應該是 11/23 00:29
charlesdc:不會被釋放掉!? 也許>< 11/23 00:29
charlesdc:有一個nullify可以使用 但是它是取消與目標的關聯性 11/23 00:59
charlesdc:取消有沒有等於釋放不清楚 另一種就是跟allocate一樣 11/23 01:00
Semisphere:若每個pointer都是allocate出來,就要逐個deallocate 11/23 10:58
YCTzeng:謝謝。 12/04 17:34