我不明白为什么这段代码不会产生任何分段错误。我在编译代码或运行时遇到了一些错误,但它运行得非常正确。
program alloc
implicit none
real, dimension(:,:), allocatable :: myVec
allocate(myVec(3,2))
myVec=1.
myVec(100,3)=10.
write(*,*) myVec(1,1)
return
end
有人可以对这种行为有所了解吗?
答案 0 :(得分:1)
使用gfortran
,您可以使用-fbounds-check
编译器标记(或-C
和ifort
)来查找此类错误。使用此选项编译示例时,程序将生成:
Fortran runtime error: Index '3' of dimension 2 of array 'myvec' above upper bound of 2
至于为什么程序不会立即崩溃,这个question包含更多细节。