Fortran Coder

查看: 23048|回复: 6
打印 上一主题 下一主题

[求助] 求助问题:Program received signal SIGSEGV

[复制链接]

4

帖子

2

主题

0

精华

入门

F 币
35 元
贡献
13 点
跳转到指定楼层
楼主
发表于 2021-3-24 16:24:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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




分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

166

帖子

2

主题

1

精华

大师

Vim

F 币
1005 元
贡献
482 点

规矩勋章

沙发
发表于 2021-3-24 18:00:29 | 只看该作者
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


166

帖子

2

主题

1

精华

大师

Vim

F 币
1005 元
贡献
482 点

规矩勋章

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

好像是gfortran的问题,输出那个位置的n,并没有数组越界发生,用ivf运行之后没有问题,用release运行也没有问题

4

帖子

2

主题

0

精华

入门

F 币
35 元
贡献
13 点
地板
 楼主| 发表于 2021-3-24 19:53:30 | 只看该作者
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

3

帖子

1

主题

0

精华

入门

F 币
68 元
贡献
29 点
5#
发表于 2021-3-24 20:26:00 | 只看该作者
[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就能正常运行了,就很奇怪(

4

帖子

2

主题

0

精华

入门

F 币
35 元
贡献
13 点
6#
 楼主| 发表于 2021-3-25 10:45:37 | 只看该作者
忧伤 发表于 2021-3-24 20:26
[mw_shl_code=fortran,true]      SUBROUTINE FUN(X,Y,A,B)
      DOUBLE PRECISION X,Y,A,B
      Double  ...

确实可以运行了,非常感谢

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1574 元
贡献
676 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

7#
发表于 2021-3-26 09:14:58 | 只看该作者
换个gfortran的版本,有一些版本有bug
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-15 01:14

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表