【问题标题】:Problem when reading Fortran file with CodeBlocks IDE使用 CodeBlocks IDE 读取 Fortran 文件时出现问题
【发布时间】:2019-03-07 22:07:41
【问题描述】:

最近,我开始学习 Fortran 编程语言。 我正在使用带有 GNU Fortran 编译器的 CodeBlocks IDE。

我在一个在线 Fortran 课程中发现了一个简单代码问题,该课程解释了如何从文件中读取和写入。

程序如下:

program main
implicit none

character (len=14) :: c1,c2,c3
integer :: n
real :: T

open(unit=10,file='titi.txt')
read(10,*) c1,n,c2
read(10,*) c3,T
close(10)


open(unit=20,file='toto.txt')
write(20,*) c1,'il est',n,c2
write(20,*)'la',c3,'est de',T,'degres'
close(20)

end

文件“titi.txt”包含的位置:

bonjour 4   heures
temperature 37.2

控制台中出现的错误信息如下:

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

 Backtrace for this error:
 #0  ffffffff

我尝试使用标志

  -g

我使用调试器发现问题出在使用“读取”的第一行

  read(10,*) c1,n,c2

我真的不知道如何处理这个问题。代码对我来说似乎很简单,我以前从未见过这个错误消息,所以我不知道它是什么意思。

提前感谢您的回答。

【问题讨论】:

    标签: fortran codeblocks


    【解决方案1】:

    感谢大家的回复。 实际上导致问题的原因是我使用的是旧编译器。因此,当我下载最后一个版本时,它一切正常,无需更改代码中的任何行。

    【讨论】:

      【解决方案2】:

      这不是一个答案,但它的评论太多了。

      它在我的电脑上运行良好。

      你能用它编译吗

      gfortran -g -O0 -fbacktrace -Wall -fcheck=all
      

      这样你应该得到更多的信息。另外,您可以添加一些错误检查:

      添加以下变量:

      integer :: ios
      character(len=100) :: iomsg
      

      然后你可以像这样为所有 io 语句添加错误检查:

      read(10,*) c1,n,c2
      

      变成:

      read(10,*,iostat=ios,iomsg=iomsg) c1,n,c2
      if (ios /= 0) then
          print*, "Error reading c1, n, c2:"
          print*, trim(iomsg)
          STOP
      end if
      

      这也可以给你一些提示。

      【讨论】:

      • 至少对于 GFortran,您显示的那种 IO 错误检查几乎毫无意义。如果 IOSTAT= 不存在,GFortran 运行时会打印出 iomsg 并停止程序,这与您在此处所做的相同。
      猜你喜欢
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      相关资源
      最近更新 更多