【发布时间】:2015-12-21 13:57:23
【问题描述】:
我这里有一些测试代码并没有像我想象的那样运行。我正在使用 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 后的大小
为什么在分配不同维度的数组时不会出错? 为什么a的大小变了?
【问题讨论】:
-
我可以用
gfortran4.8.4 版重现这种行为(除了“a size after”是 8,而不是 4)。我曾尝试使用-fcheck=bounds,但即使这样也没有用。对我来说看起来像是一个编译器错误。 -
有趣,我正在使用 gfortran test.f95 -o test.out 进行编译。如果是这种情况,应该有人雇用我来寻找错误,我似乎总是遇到它们。
-
8 是正确的答案。或者我错过了什么?
标签: arrays dynamic fortran size variable-assignment