Fortran 分配给未分配变量

Fortran 分配给未分配变量,fortran,gfortran,allocation,Fortran,Gfortran,Allocation,代码中的一行将数组分配给未分配的数组。我认为这是一个错误,但令我惊讶的是,它工作得很好 program test implicit none real, allocatable :: x(:,:) real :: y(2,2) y = 1. x = y print*, x end program test 这在记忆方面是如何工作的?这里的=操作符只是同时分配和赋值?为什么这是可能的,为什么编译器没有抱怨?我使用的是gfortran 5.4.0。根据第

代码中的一行将数组分配给未分配的数组。我认为这是一个错误,但令我惊讶的是,它工作得很好

program test
implicit none
    real, allocatable :: x(:,:)
    real :: y(2,2)

    y = 1.
    x = y

    print*, x
end program test

这在记忆方面是如何工作的?这里的
=
操作符只是同时分配和赋值?为什么这是可能的,为什么编译器没有抱怨?我使用的是gfortran 5.4.0。

根据第3段第7.2.1.3节“内部赋值的解释”,这是正确的。

自Fortran 2003以来,可分配数组将在运行时自动分配(或在形状发生变化时重新分配)。例如,请参阅NAG编译器的Fortran 2003功能,或在gfortran的文档中查找“realloc”

这可能是一个与链接为重复的问题相同的问题,但在我看来,这是一个更明确的问题(也更容易找到)。所以我暂时不提这个问题,尽管它被标记为重复。你当然想保留这个问题。作为一个复制品本身并不坏。事实上,其中一个方面更为明确。