Fortran中的自动数组释放

her*_*ung 6 fortran

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

什么时候自动释放?我应该以不同的方式编码吗?

Vla*_*r F 15

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

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

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

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