Fortran Coder

标题: 求助问题:Program received signal SIGSEGV [打印本页]

作者: Humpback    时间: 2021-3-24 16:24
标题: 求助问题:Program received signal SIGSEGV
本帖最后由 Humpback 于 2021-3-24 16:31 编辑

各位前辈好,我手上有一个别人的fortran程序,是一篇文章里面的,代码的244行是原来的表达式,我需要把它替换为246行的表达式,替换之后编译运行,报错,提示信息如下:

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:Backtrace is unavailable.  Please use the Simply Fortran debugger for similar functionality

程序本身没有问题,得到的结果也是正确的,换成我的这个式子以后就报错了,我以前没有接触过fortran,问了同学说应该是数组下标是否越界,数组元素是否存在这些问题,但是没有修改成功,请问应该如何进行修改,Windows平台,编译器是Approximatrix Simply Fortran
代码如下
http://p.fcode.cn/_aQayE





作者: Transpose    时间: 2021-3-24 18:00
simply fortran 编译选项加上 -fcheck=all(我没有simply fortran ,用的是同为gfortran的code::blocks)
报错如下
Fortran runtime error: Index '53' of dimension 1 of array 'epstab' above upper bound of 52
对应代码为
      EPSTAB(N+2) = EPSTAB(N)
可能的情况是N=51



作者: Transpose    时间: 2021-3-24 18:15
Transpose 发表于 2021-3-24 18:00
simply fortran 编译选项加上 -fcheck=all(我没有simply fortran ,用的是同为gfortran的code::blocks)
报 ...

好像是gfortran的问题,输出那个位置的n,并没有数组越界发生,用ivf运行之后没有问题,用release运行也没有问题
作者: Humpback    时间: 2021-3-24 19:53
Transpose 发表于 2021-3-24 18:15
好像是gfortran的问题,输出那个位置的n,并没有数组越界发生,用ivf运行之后没有问题,用release运行也没 ...

非常感谢你的回复。我在vs2012上面生成解决方案的时候失败了,提示2 error(s), 1 warning(s),请问这是为什么呢?vs2012是和ivf组合安装的,是我安装有问题吗,还是版本问题?ivf的版本是Intel(R) Visual Fortran Composer XE 2013
作者: 忧伤    时间: 2021-3-24 20:26
[Fortran] 纯文本查看 复制代码
      SUBROUTINE FUN(X,Y,A,B)
      DOUBLE PRECISION X,Y,A,B
      Double COMPLEX  ss,ff,lamda
      double COMPLEX  pt,fenzi,fenmu
      DOUBLE PRECISION a0,r
         
          a0=10.0
          r=5.0
      ss=CMPLX(X,Y)   !+(r-a0)/cp
   
      lamda=sqrt(ss**2*(ss+2)/(1+ss))
     
      fenzi=cosh(lamda*(r-a0))
      fenmu=cosh(lamda*a0)
c      pt=-0.04*(1/ss-exp(-6.25*ss)/ss)   
      
       pt=(54-58*exp(-12.5*ss)+4*exp(-125*ss))/(4500*ss**2)
       WRITE(10,*)pt      !NEW CODE
      ff=pt*fenzi/fenmu
                  a= real(ff)
            b= imag(ff)
!     RETURN
      END

不知道为什么,用Simply Fortran调试的时候,加上write就能正常运行了,就很奇怪(
作者: Humpback    时间: 2021-3-25 10:45
忧伤 发表于 2021-3-24 20:26
[mw_shl_code=fortran,true]      SUBROUTINE FUN(X,Y,A,B)
      DOUBLE PRECISION X,Y,A,B
      Double  ...

确实可以运行了,非常感谢
作者: fcode    时间: 2021-3-26 09:14
换个gfortran的版本,有一些版本有bug




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2