You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran中deallocate分配数组后,关联指针的行为探究

关于Fortran悬垂指针的问题解答

这是典型的未定义行为,最后一条print *,d能输出正确值完全是偶然情况,原因如下:

  • 执行deallocate(c)后,数组c占用的内存被归还给内存管理器,不再属于任何合法的程序变量。此时指针d成为悬垂指针,它指向的内存区域已经没有有效的绑定对象。
  • 你的短程序中,这段刚释放的内存还没被其他操作覆盖,所以数据暂时保留,打印出了原来的数值。但在更长的程序里,后续的内存分配、变量赋值等操作大概率会覆盖这块内存,这时再通过d访问就会得到乱码,甚至直接导致程序崩溃。
  • Fortran语言标准明确规定,访问指向已释放内存的悬垂指针属于未定义行为,编译器不会对这类操作的结果做任何保证,不同编译器、不同运行环境下的表现可能完全不同。

内容的提问来源于stack exchange,提问作者bob.sacamento

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:05:58