就像标题一样简单。我有一个学生遇到了分段错误,我试图向他证明为什么会发生这种情况。相反,我最终想知道为什么没有。
代码是这样的:
program main
implicit none
real*8, allocatable:: u(:)
integer :: i
allocate(u(2))
do i=0, 1000
u(i) = i
print *, u(i)
enddo
end program main
我预计这会崩溃i=3
,但事实并非如此。使用 -O0 到 -O3 的 ifort 和 gfortran 进行编译
打开编译的边界检查选项,然后向学生解释,当边界检查的额外开销没有到位时,段错误是越界访问的常见结果,怎么样?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)