Fortran没有给出数组赋值错误

时间:2015-09-24 04:19:46

标签: arrays dynamic fortran size 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

我得到以下输出。

1 1

2 2 2 2

2之前的大小

1 1 1 1

2 2 2 2

4之后的大小

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

1 个答案:

答案 0 :(得分:6)

这是一项名为allocation on assignment的功能。将数组分配给可分配数组时,会自动调整大小。因此,在a = b之后,a的大小应为b

您可以通过-Wrealloc-lhs选项告诉编译器发出警告。

另见这名男子参赛作品:

  

-frealloc-LHS

     

内在赋值的可分配左侧是      如果未分配或具有a,则自动(重新)分配      不同的形状。默认情况下启用该选项,除非      -std=f95被给予。另请参阅-Wrealloc-lhs

另请参阅Steve Lionel撰写的相关博客文章Doctor, it hurts when I do this