Fortran没有给出数组赋值错误

Kie*_*son 5 arrays size fortran dynamic variable-assignment

我在这里有一些测试代码没有像我怀疑的那样.我正在使用gfortran编译器.

program test
implicit none

integer, allocatable, dimension(:) :: a
integer, allocatable, dimension(:) :: b

allocate(a(2))
allocate(b(4))

a = 1
b = 2
write(*,*) a
write(*,*) ' '
write(*,*) b
write(*,*) ' '
write(*,*) 'a size before', size(a)

a = b
a = 1

write(*,*) a
write(*,*) ' '
write(*,*) b
write(*,*) ' '
write(*,*) 'a size after', size(a) 
end program test
Run Code Online (Sandbox Code Playgroud)

我得到以下输出.

1 1

2 2 2 2

2之前的大小

1 1 1 1

2 2 2 2

4之后的大小

为什么在分配不同尺寸的数组时没有出错?为什么改变了大小?

har*_*dkl 6

这是一项称为分配分配的功能.将数组分配给可分配数组时,会自动调整大小.所以之后a = b,a预计会有大小b.

您可以通过该-Wrealloc-lhs选项告诉编译器警告这一点.

另见这个人的条目:

-frealloc-LHS

如果内部赋值的未分配或具有不同的形状,则会自动(重新)分配内部赋值的可分配左侧.默认情况下启用该选项,除非-std=f95给出了该选项 .另见-Wrealloc-lhs.

另请参阅相关的博客文章Doctor,当我由Steve Lionel 执行此操作时会受到伤害.