1
假设我有这个子程序:一旦指针超出范围,内存是否会被释放?
subroutine a()
integer, pointer :: b
allocate(b)
end subroutine a
变量b
是子程序的堆栈,因此将被摧毁,一旦从子程序的程序返回。但是它指向的目标呢?据我所知,通过阅读F90标准,目标是而不是解除分配,但我无法明确地找到明确的说法。
假设我有这个子程序:一旦指针超出范围,内存是否会被释放?
subroutine a()
integer, pointer :: b
allocate(b)
end subroutine a
变量b
是子程序的堆栈,因此将被摧毁,一旦从子程序的程序返回。但是它指向的目标呢?据我所知,通过阅读F90标准,目标是而不是解除分配,但我无法明确地找到明确的说法。
简短的回答是否。您有责任拨打电话deallocate(b)
,就像您负责以同样的方式拨打allocate(b(100))
一样。
感谢您的回复! – 2013-05-06 16:56:32
除非语言被定义为执行垃圾回收,否则将其释放是错误的。您可能已将该指针分配给全局变量。 – Barmar 2013-05-03 23:24:43
我之所以问的原因是,根据我对标准的阅读,具有'allocatable'属性的变量在离开范围时会被释放。实际上,虽然具有'pointer'或'allocatable'属性的变量在其他方面具有相同的表现,因此我的困惑。 – 2013-05-06 16:58:26