我有一个应该给出分段错误的 Fortran 程序,但它没有 [英] I have a Fortran program that should give segmentation fault but it doesn't

查看:12
本文介绍了我有一个应该给出分段错误的 Fortran 程序,但它没有的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

就像标题一样简单.我有一个学生遇到了分段错误,我试图证明他为什么会发生这种情况.相反,我最终想知道为什么它没有.

As simple as the title. I have a student who got a segmentation fault and I was trying to prove him why does this happen. Instead, I ended up wondering why it doesn't.

代码是这样的:

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 处崩溃,但事实并非如此.使用 ifort 和 gfortran 编译,带 -O0 到 -O3

I would expect this to crash at i=3, but it doesn't. Compiled with both ifort and gfortran with -O0 to -O3

推荐答案

如何打开编译的边界检查选项,然后向学生解释当额外开销时越界访问的常见结果是段错误for 边界检查没有到位?

What about turning on the bounds checking option for compilation and then explaining to the student that a seg fault is a common result for out of bounds access when the extra overhead for bounds checking is not in place?

这篇关于我有一个应该给出分段错误的 Fortran 程序,但它没有的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆