2013-05-03 71 views
1

假設我有這個子程序:一旦指針超出範圍,內存是否會被釋放?

subroutine a() 
    integer, pointer :: b 
    allocate(b) 
end subroutine a 

變量b是子程序的堆棧,因此將被摧毀,一旦從子程序的程序返回。但是它指向的目標呢?據我所知,通過閱讀F90標準,目標是而不是解除分配,但我無法明確地找到明確的說法。

+2

除非語言被定義爲執行垃圾回收,否則將其釋放是錯誤的。您可能已將該指針分配給全局變量。 – Barmar 2013-05-03 23:24:43

+0

我之所以問的原因是,根據我對標準的閱讀,具有'allocatable'屬性的變量在離開範圍時會被釋放。實際上,雖然具有'pointer'或'allocatable'屬性的變量在其他方面具有相同的表現,因此我的困惑。 – 2013-05-06 16:58:26

回答

1

簡短的回答是。您有責任撥打電話deallocate(b),就像您負責以同樣的方式撥打allocate(b(100))一樣。

+0

感謝您的回覆! – 2013-05-06 16:56:32