0

說我有下面的代碼:的Fortran分配數組一生

program test 
    call foo 
    call foo 
contains 
    subroutine foo 
    integer(8),dimension(:),allocatable:: var1 
    allocate(var1(10)) 
    ... 
    return 
    end subroutine foo 
end 

將變量VAR1獲得分配兩次? (我猜是)。如果分配給每個呼叫,第一次呼叫期間分配的內存是否空閒?

回答

6

每次執行ALLOCATE語句(即每次調用foo過程時)都會分配var1(試圖))。

在Fortran 90(僅)的規則下,當過程結束時,foo的分配狀態變得未定義。具有未定義分配狀態的變量將變得不可用 - 您無法在隨後的過程調用中合法地重新分配。

在Fortran 95和更高版本中,因爲它是一個本地非保存變量,所以每次執行foo過程結束時都會釋放var1。

+2

在Fortran 95中添加了程序退出時自動釋放本地未保存的可分配內存以避免內存泄漏。 – 2012-08-07 01:53:53

+0

fortran95?我正在使用fortran90。行爲改變了嗎? – arunmoezhi 2012-08-07 02:06:26

+0

它在Fortran 90中不保證。什麼編譯器是Fortran 90,但不符合Fortran 95? – 2012-08-07 03:36:30