2013-05-03 72 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