目前我正在試圖用Fortran編寫一個小子程序釋放了所有的變量分配內存時,我的程序涉及到一個錯誤,即未能加載文件或不存在的必要文件。在這一點上,執行必須終止,但並非所有的可分配都必須分配(這取決於錯誤出現在代碼的哪個位置),所以我無法進行清除所有分配。的Fortran DEALLOCATE
我目前的做法是:
SUBROUTINE Cleanup(A)
REAL(8), ALLOCATABLE, DIMENSION(:) :: A
IF (ALLOCATED(A)) THEN
DEALLOCATE(A)
END IF
END SUBROUTINE
,並呼籲 「清理」 爲每一個分配。這個問題是,並不是我所有的變量都是維度-1。其中一些我有三個維度。
我第一次想過寫3個不同的子程序爲不同的尺寸和使用重載,但這並不似乎是很優雅。
然後它來到我的腦海裏,也許我可以傳遞一個指針,而不是實際工作參數A,但我GOOGLE了,似乎你不能解除分配目標變量槽的指針。
有關如何做到這一點適當的任何想法?
謝謝。
當執行結束時,代碼使用的所有資源都會自動釋放,因此您不必擔心明確釋放它們。 – 2013-05-08 08:54:09
我知道Fortran會自動釋放內存,但在這種情況下,我正在寫一個從Labview調用的dll,所以這是誰在管理內存。當dll發生錯誤時,Labview突然停止,如果我嘗試重新執行,它將顯示消息:「Array已分配」並關閉。這意味着內存不能正確釋放。 – derkomai 2013-05-08 09:02:59
注意:'real(8)'不保證是8個字節。可移植的方式是使用ISO_FORTRAN_ENV,對64位使用「real(real64)」。 – 2013-05-08 13:35:03