Fortran gfortran linux 中的“分段错误(核心转储)”错误

2024-05-22

我正在创建一个程序,该程序将分析目录中的文件 .fits,然后它将在另一个目录中创建另一个文件 .txt。它只是一个转换器。

当我尝试执行该程序(编译正常)时,它给了我一条错误消息:

程序收到信号 SIGSEGV:分段错误 - 无效的内存引用。

此错误的回溯: 0 0x7FC5ADB1C117 1 0x7FC5ADB1C6F4 2 0x7FC5AD46C0AF 3 0x44E704 在 fitscore.c:6893 的 ffthdu 中 4 0x405101 在 Codigo.f90 的 MAIN__ 中:? 分段错误(核心转储)

还有另一个信息:当我删除执行“写入新的 .txt 转换器文件”部分的程序的一部分时,程序正常并读取整个 .fits 文件!这是这个拉伸:

arq='spec-1.txt'
open (29,file=arq,status='unknown')
write(29,*) '  l(n)                      fa(n)'
do n=1,naxes
   write(29,*) l(n), fa(n)
end do

我已将变量“arq”声明为一个字符,一切正常。当我删除这个拉伸时,分段错误不再出现,但我不知道现在该怎么做,因为我需要将信息传递给这个.txt!而且“arq”字符串不完整,因为我现在只是测试,稍后我将添加整个目录。

这是完整的程序,我使用“gfortran Codigo.f90 -o TESTE -Lcfitsio -lcfitsio”来编译它:

implicit none

integer largo,status,hdnum,n,keysexist,keysadd,bitpix,naxis
integer naxes,readwrite,blocksize
integer i,j,k
integer iF(3),iT(3),iw(3),iwe,il,ib,jb,iFold,iFoldmin(3)
integer iFoldmax(3),iFoldopt(3)
integer iMiMy,iMo,Tymin,Tymax,Timin,Timax,Tyoung(3),Tint(3),Told
integer i912,i45000,Tyin,Tiin,nrows,ncols,datacode,repeat,width
integer nlam_ext
integer fKD,fKK,fKKD
parameter (nlam_ext = 1145)
CHARACTER NAMECH*256,name2*256,alibi*1000,card*80,code*14
CHARACTER arq*1000
CHARACTER name(7)*256,namein*256,nebname*256,nameout*256
CHARACTER nameindva*256,nameoutdva*256,mid(3)*4,line*1000
real fa(10000),fcs(10000),noiz(10000),mask(10000)
real*8 l(10000)
real*8 w_ext(nlam_ext),alam_ext(nlam_ext)
REAL*8 F(3,7),T(3,35),Fl(3,7,36,6900),w(3,6900),y(6900),ye(6900)
REAL*8 SN(6900),xe(6900)
real*8 CHISQU,CHISQUmin(3),CHISQUup,CHISQUdown,CHISQUmid,nf,nfup
real*8 nfdown,nfmid,nfopt(3)
real*8 t4020,y4020,i4020,o4020,t4860,y4860,i4860,o4860
real*8 xd(10000),yd(10000),absorb,ebminv,ke,redshift
real*8 xf(10000),yf(10000),yp(10000)
real*8 x(6900)
real*8 flueks(10000),extcurve(10000)
real*8 xg,yg(10000),x2,y2(10000)
REAL*8 sng,ewa,ewb,ewg,hha,hhb,oldage(3)
REAL*8 Mo(9),MiMy(9),Myoung,Mint,Mold,Myopt(3),Miopt(3),Moopt(3)
REAL*8 Fyoung,Fint,Fold(7),Noise
real*8 a,b,c, plyus,minus,xx,nebemm(6900),yy(6900)
real*8 Flyoung(6900),Flint(6900),Flold(6900)
real*8 ha,Oiii4959,Oiii5007,Nii,Nii2,Sii6717,Sii6731,Oii3727,Hei
real*8 hhg,hg,Oiii4363,Oii7319,Oii7330,Nii6548,Nii6584
real*8 R23,R3,P,XNII,xis,yps,O3N2,R,Z,k0,k1,k2,q,logq
real*8 OHNII,OHZ,OHMcG,OHP,OHKD,I2lOH,OHKK
real*8 OHKKD,OHKKbe,OHPPN2,OHPPO3N2,OHP05,I2lOHbef
logical anynull
  ebminv = 0.
namech='/home/matheus/Desktop/IC/Spectra/Elliptical/spec-0266-51602-0467.fits'
write(6,*)namech
readwrite=0
status=0
call ftopen(17,namech,readwrite,blocksize,status)
call ftghsp(17,keysexist,keysadd,status)
do n=1,keysexist
  call ftgrec(17,n,card,status)
  if (card(1:9)=='CRVAL1  =') then
    read(card,'(a9,e21.14)')alibi,a
  endif
  if (card(1:6)=='NAXIS1') then
    read(card,'(a9,i21)')alibi,
   endif
  if (card(1:6)=='Z     ') then
    read(card,'(a9,e21.14)')alibi,redshift
  endif
  if (card(1:6)=='SN_G  ') then
    read(card,'(a9,e21.14)')alibi,sng 
  endif
enddo
l(1)=10.**a/(1.+redshift)
l(naxes)=10.**(a+0.0001*float(naxes-1))/(1.+redshift)
  do n=1,naxes
  l(n)=10.**(a+0.0001*float(n-1))
enddo
 call ftthdu(17,hdnum,status)
call ftgidt(17,bitpix,status)
call ftgtcl(17,1,datacode,repeat,width,status)
call ftgpve(17,1,1,naxes,0.,fa,anynull,status)
call ftgpve(17,1,naxes+1,naxes,0.,fcs,anynull,status)
call ftgpve(17,1,2*naxes+1,naxes,0.,noiz,anynull,status)
call ftgpve(17,1,3*naxes+1,naxes,0.,mask,anynull,status)
call ftclos(17,status) 
write(6,*)'spectra read in',l(1),l(naxes)
arq='spec-1.txt'
open (29,file=arq,status='unknown')
write(29,*) '  l(n)','                      fa(n)'
do n=1,naxes
   write(29,*) l(n), fa(n)
end do


 close(25)
write(6,*)
write(6,'(a)')'Justice is done'
 end

实际上,错误的发生是因为它给 naxes 的值始终为零!


Fortran 中致命内存错误的最常见原因是非法的数组下标以及过程(子例程或函数)调用的参数与过程的声明参数之间的不一致。首先,打开运行时下标检查。使用 gfortran,-fcheck=bounds,或者更好的是,打开额外的运行时检查-fcheck=all。对于过程参数问题,将所有过程放入模块中并use来自调用任何过程的任何例程的那些模块。这将使编译器能够在编译时检查参数一致性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fortran gfortran linux 中的“分段错误(核心转储)”错误 的相关文章

随机推荐

  • 如何将 gettext 字典中的术语输入 JavaScript?

    我正在尝试使用 php 和 javascript jquery 开发一个支持多种语言的网站 我正在尝试获得以下东西 高效 我需要尽可能减少这个操作的后端处理 可扩展 向翻译添加新字符串必须简单实用 问题是 我的 javascript 代码正
  • 无法获取 ComboBox 所选项目值

    我现在正在使用这段代码 我需要获取组合框所选项目的字符串值 procedure TForm5 BitBtn5Click Sender TObject var c k t g string begin Get the name of the
  • 如何强制 OCaml 推断出更通用的类型?

    我想定义一个接受可选参数的函数 该参数是一个函数 a gt b 默认值应该是identity 实际上就是 a gt a 但我认为没有理由它不应该与更通用的兼容 a gt b 当我尝试时 let optional apply f i matc
  • JQuery 可搜索下拉框

    我有一个可搜索列表 是使用 JQuery 插件创建的 http plugins jquery com searchit http plugins jquery com searchit 但我希望当列表框第一次出现时默认选择一些值 即使我在选
  • iTextSharp。为什么单元格背景图像顺时针旋转90度?

    我希望使用单元格背景使用它的自然尺寸 如果它们不适合单元格 图像应该被裁剪 另一件事是 当我使用图案填充图像时 图像实际上旋转了 90 度 所以这个问题的主要问题是为什么图案图像在添加后会旋转我已经用谷歌搜索答案并阅读文档 但找不到任何解释
  • IE 位置问题:绝对

    我有这段代码 它在 Firefox 中运行得很好 但在资源管理器上会向右射击 这段代码有什么我看不到的问题吗 感谢您的帮助 div a href http www mysite com img src images sponsor png
  • ModX Revo:更新站点基本 URL?

    在选择域名之前 我为客户开发了一个网站 因此 网站页面的 URL 如下所示 http host mynost net tempname index php id 8 域名现已购买 但如果我单击任何 Wayfinder 链接 它仍然使用上面的
  • 如何在R中生成六角形网格

    我希望能够创建一个覆盖另一个 SpatialPolygon 的 SpatialPolygons 对象 这是一个六角形网格 我希望所有六边形的直径为 1 公里 理想情况下我可以改变这个 并且所有六边形一起覆盖整个物体 下面的方法似乎只涵盖了一
  • 发送excel电子邮件附件c#

    我有一种方法可以创建 Excel 文件并将其作为电子邮件附件发送 发送方法有效 但问题是它将 Excel 转换为 txt 文件 当您打开它时 它会显示This file has been removed 我使用 EPPLUS 库创建 Exc
  • TeamCity:如何告诉 MSBuild 考虑发布配置文件参数?

    当我想使用发布配置文件编译我的项目时 我使用 MSBuild 步骤进行 TeamCity 构建配置 我的发布配置文件位于MyProject Properties PublishProfiles profile pubxml 我的配置文件 p
  • 在chrome中将pdf渲染为iframe

    我正在尝试将 pdf 托管在隐藏的 iframe 中 但在 Chrome 中呈现较小的问题时遇到问题 我必须刷新页面才能正确加载 JSfiddle 在这里https jsfiddle net 464xo40f https jsfiddle
  • 2n + 1 法定人数是什么意思?

    我在描述 HBase 的 Zookeeper 配置时遇到过这个问题 但我对这个术语并不熟悉 N 与我的 HBase 集群中的节点数量有关系吗 或者我应该在 Zookeeper 集群中使用的节点数量 2f 1是指你所需要的可靠性 可用性水平
  • 仅对布尔可观察值中的错误值进行反跳

    我有一个布尔可观察值 通过观察者 启动和停止 Android 服务 当 true 被传递时 服务必须立即启动 当 false 被传递时 我想将其反跳 以防很快出现 true 以避免不必要的 和破坏性的 服务停止和启动 是否有可以做到这一点的
  • 使用 cordova-plugin-file 从 cordova (ionic) 中的 SD 卡读取文件作为数组

    我在我的应用程序中使用需要作为缓冲区数组获取的音频文件 为此 我让用户选择一个文件 使用 Ionic Cordova FileChooser 插件 https ionicframework com docs native file choo
  • 如果存在多个相同的 ID,则使用 where 子句

    我有下表 ID source Name Age 1 SQL John 18 2 SAP Mike 21 2 SQL Mike 20 3 SAP Jill 25 我希望每个ID都有一条记录 这背后的想法是 如果 ID 仅出现一次 无论来源如何
  • 如果 xmlwriter 是推荐的,那么 xmltextwriter 的用途是什么

    As per MSDN http msdn microsoft com en us library vstudio kkz7cs0d 28v vs 100 29 aspx 尽管 Microsoft NET Framework 包含 XmlT
  • 语音识别和声音与音乐的比较

    我正在尝试制作一个具有语音识别功能的 Android 应用程序 但不幸的是谷歌不支持我的语言 马其顿语 并且我正在尝试比较两个录音声音 我在用着http code google com p musicg http code google c
  • 如何更新 PHP 中 xpath 的版本? [复制]

    这个问题在这里已经有答案了 可能的重复 XPath 2 0 和 或 XSLT 2 0 是否会在 PHP 中实现 https stackoverflow com questions 2085632 will xpath 2 0 and or
  • 如何使用 twilio Whatsapp 发送消息而不发送“加入 [KEY-WORD]”WhatsApp 消息

    我想向我的 WhatsApp 收件人发送 Whatsapp 消息 但 WhatsApp 收件人需要通过向您在沙盒中选择的电话号码发送 加入 关键字 WhatsApp 消息来选择加入 我想发送消息而不需要发送 加入 KEY WORD What
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的