为什么对可分配数组的超出绑定访问不会导致错误?

时间:2017-12-07 21:13:29

标签: fortran dynamic-allocation

我不明白为什么这段代码不会产生任何分段错误。我在编译代码或运行时遇到了一些错误,但它运行得非常正确。

program alloc

implicit none

real, dimension(:,:), allocatable :: myVec

allocate(myVec(3,2))    

myVec=1.

myVec(100,3)=10.

write(*,*) myVec(1,1)

return
end

有人可以对这种行为有所了解吗?

1 个答案:

答案 0 :(得分:1)

使用gfortran,您可以使用-fbounds-check编译器标记(或-Cifort)来查找此类错误。使用此选项编译示例时,程序将生成:

Fortran runtime error: Index '3' of dimension 2 of array 'myvec' above upper bound of 2

至于为什么程序不会立即崩溃,这个question包含更多细节。