我发现由于数组大小不匹配而使用gcc v.4.4.6构建的代码无法运行,我感到非常惊讶.使用gcc v.4.7.3构建时,它工作正常.我创建了一个最小的工作示例来显示问题的根源:
program main
implicit none
integer, allocatable, dimension(:,:) :: array_a
integer, allocatable, dimension(:,:) :: array_b
allocate(array_a(5,2))
allocate(array_b(2,1))
array_a = 1
array_b = array_a
print *, array_a
print *, array_b
end program main
Run Code Online (Sandbox Code Playgroud)
使用gcc v.4.4.6构建时,它会在运行时崩溃并出现错误:
在文件main.f90的第13行Fortran运行时错误:数组绑定不匹配,数组'array_b'的维度1的大小不匹配(1/4)
使用gcc v.4.7.3构建时,它会产生以下输出:
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
注意,它会自动调整'array_b'的大小以匹配'array_a'的大小.这是我所看到的更新的Fortran标准提供的"功能"吗?
您正在使用Fortran 2003功能 - 分配时自动重新分配数组.它尚未在gcc-4.4中实现.
此功能意味着之前分配给不合格形状的数组b会自动重新分配到赋值右侧的形状.对于Fortran 2003功能,您必须使用最新的编译器版本(不仅仅是GCC).