我的代码中的一行将数组分配给未分配的数组。我认为这是一个错误,但令我惊讶的是它工作得很好。
program test
implicit none
real, allocatable :: x(:,:)
real :: y(2,2)
y = 1.
x = y
print*, x
end program test
这如何在记忆方面起作用?这里的=
运算符只是同时分配和分配?为什么这可能,为什么编译器不抱怨?我正在使用gfortran 5.4.0。
答案 0 :(得分:1)
自Fortran 2003起,可运行时将自动分配(或在形状发生变化时重新分配)可分配数组。例如,参见NAG编译器https://www.nag.com/nagware/np/r61_doc/nag_f2003.pdf的Fortran 2003功能,或者在gfortran https://gcc.gnu.org/onlinedocs/gfortran/Error-and-Warning-Options.html#Error-and-Warning-Options的文档中查找“realloc”
答案 1 :(得分:0)
这是正确的,根据第7.2.1.3节,"对内在任务的解释" WD 1539-1,第3段。