fortran - 使用未在数组赋值中分配的可分配数组
问题描述
在 Fortran 中,如果我使用未在数组赋值中分配的可分配数组,我预计会出现一些运行时错误。但事实证明,可分配数组是在分配期间分配的。这似乎是一个危险的设计。有人可以解释这种设计的原因吗?示例代码如下:
module yj_mod
real,dimension(:,:),allocatable :: den_i_right
end module yj_mod
program main
call p()
end program main
subroutine p()
use yj_mod,only : den_i_right
implicit none
real :: a(3,4)
a=3.0
den_i_right=a
write(*,*) size(den_i_right,1), size(den_i_right,2)
end subroutine p
我用 gfortran 编译了上面的代码。运行代码表示den_i_right
变成了一个形状相同的数组a
解决方案
它被非正式地称为(.....等待它.....)(重新)分配分配。Fortran 2003 标准中的特定语言使用variable=expr
“如果variable
是一个已分配的可分配变量,如果expr
是一个不同形状的数组或任何相应的长度类型参数值variable
和expr
不同,它就会被释放。如果variable
是或成为一个未分配的可分配变量,那么它被分配给每个延迟类型参数相等对应的类型参数expr
,形状为expr
,每个下限等于 的对应元素LBOUND(expr)
。"
推荐阅读
- node.js - Strapi CMS,如何制作包裹(价格表)表?
- xamarin - 为什么 Navigation.PushModalAsync 返回 null
- go - 带有 gorilla websocket 包的并发 writeJSON
- apache-spark - 为什么不在空的 Spark 集群上强制执行preferredLocations?
- php - 在表中搜索动词+名词
- flutter - 有来电时调用 dart 中的函数
- r - 自动对齐 dplyr 管道
- javascript - Material-ui Dialog:在对话框外操作 Escape 按钮和鼠标点击
- azure - 在 Azure 数据工厂中更改 CSV 行
- javascript - 领域错误:无法读取 ObjectSchema:JS 值必须是“对象”类型,得到