Fortran中的自动数组释放

时间:2014-02-04 11:32:59

标签: fortran

我正在使用gfortran -std = f2008。我有一个函数返回包含可分配数组的派生类型。该函数在返回之前调用allocate()。似乎数组在分配数组的函数返回后的某个时间被自动释放,并且我的程序会出现段错误。

何时发生自动释放?我应该以不同的方式对此进行编码吗?

2 个答案:

答案 0 :(得分:15)

一个普遍的答案:当超出范围时,可分配的数组会自动释放。在外部作用域中“使用”结果后,将自动释放函数结果。当父派生类型变量超出范围或取消分配时,可释放分配可分配组件。

仅指向函数结果的pointers在取消分配后未定义,不得使用。如果你这样做,可能会导致你描述的问题。

此外,当一个数组在赋值时自动重新分配时,指向它的指针变为未定义(但实际上可能不会改变)。

换句话说,当正确使用allocatable时,不应出现您描述的问题。

答案 1 :(得分:3)

另一个一般建议:大多数时候,使用子程序而不是函数来返回复杂的结果比如数组,指针,带有可分配内部的派生类型更安全...

其他问题:你在表达式中使用你的函数吗?如果没有那么它应该是一个子程序。只有在计算表达式中使用Fortran函数才有兴趣。