首页 > 解决方案 > 了解 fortran 中的回溯错误

问题描述

当我执行使用gfortran. 该错误之后是指向内存位置的此错误的回溯。

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x2b2f8e39da2d in ???
#1  0x2b2f8e39cc63 in ???
#2  0x311823256f in ???
#3  0x311827a7be in ???
#4  0x2b2f8e39cff2 in ???
#5  0x2b2f8e4adde6 in ???
#6  0x2b2f8e4ae047 in ???
#7  0x2b2f8e4a62d7 in ???
#8  0x40482a in instrument_
    at /home/user/model/instrument.f:90
#9  0x406c1e in funcdet
    at /home/user/model/funcsynth.f:67
#10  0x406c98 in main
    at /home/user/model/funcsynth.f:78
Segmentation fault (core dumped)

我想知道第一个错误发生在哪里——是回溯的第一行还是最后一行?此外,可能有助于我调试问题的策略。

更新:

回溯后,第 90 行instrument涉及打开文件,如下所示:

  out_file3 = 'new_file'
  OPEN(unit=3,file=out_file3,status='unknown')

为了确定背后的问题,我通过这样做合并了错误检查:

  OPEN(unit=3,file=out_file3,status='unknown',iostat=io_status, err=100)
  100  write(STDOUT,*) 'io status=', io_status 

代码退出并出现错误:错误:(1) 处的 ERR 规范值无效。如何确定 ERR 规范的适当值?这让我怀疑 unit=3 可能是错误的原因,我已经更改了 unit 的值,但每次都会收到“Segmentation fault (core dumped)”错误。

更新 2:

OPEN(unit=3,file=out_file3,status='unknown',err=17)
17  write(STDOUT,*) 'Problem' 

仍然Segmentation fault (core dumped)在对应的行得到错误OPEN...。我只能猜测这unit=3是问题的根本原因。

更新 3

尝试一个自给自足的例子:

  character*280       testfile,finalfile,outfile
  DIR = '/storage/work/user/'
  testfile = 'test.dat'
  CALL getenv(DIR,outfile)
  CALL sappend(outfile,testfile,finalfile)
  OPEN(unit=3,file=finalfine,status='new')
  write(3,*) 'Test'
  END

标签: fortrangfortran

解决方案


推荐阅读