我正在使用gfortran -std = f2008.我有一个函数返回包含可分配数组的派生类型.该函数在返回之前调用allocate().似乎数组在分配数组的函数返回后的某个时间被自动释放,并且我的程序会出现段错误.
什么时候自动释放?我应该以不同的方式编码吗?
Vla*_*r F 15
一个普遍的答案:当超出范围时,可分配的数组会自动解除分配.在外部作用域中"使用"结果后,将自动释放函数结果.当父派生类型变量超出范围或取消分配时,可释放分配可分配组件.
只是pointers,指向函数结果在取消分配后未定义,不得使用.如果这样做,可能会导致您描述的问题.
此外,当一个数组在赋值时自动重新分配时,指向它的指针变为未定义(但实际上可能不会改变).
换句话说,当正确使用allocatable时,不应出现您描述的问题.
| 归档时间: |
|
| 查看次数: |
2730 次 |
| 最近记录: |