Fortran Coder

查看: 42018|回复: 14
打印 上一主题 下一主题

[求助] 出现错误Segmentation fault - invalid memory reference.

[复制链接]

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
跳转到指定楼层
楼主
发表于 2020-3-9 16:14:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 kyra 于 2020-3-12 09:02 编辑

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:#0  ffffffff
编程时没有问题,但是在运行时console中就会出现这个问题,不知道是哪里出了问题

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

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
15#
 楼主| 发表于 2020-6-9 00:45:06 | 只看该作者
wintry 发表于 2020-6-4 13:52
我这两天也遇到了同样的问题,相同的代码一个电脑上可以运行,另一台电脑上就是跟你一样的错误代码。
后来 ...

好的,谢谢你啦

1

帖子

0

主题

0

精华

新人

F 币
20 元
贡献
4 点
14#
发表于 2020-6-4 13:52:52 | 只看该作者
我这两天也遇到了同样的问题,相同的代码一个电脑上可以运行,另一台电脑上就是跟你一样的错误代码。
后来查资料发现是gfortran编译器的问题,可以换一下gfortran的版本或者换一台电脑试试。
你可以参考这个:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58913

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
13#
 楼主| 发表于 2020-3-14 10:34:49 | 只看该作者
kyra 发表于 2020-3-13 17:10
主程序
call daysfromdate(1954,1,1,2007,12,31,0)
改为

谢谢前辈了,可以运行了

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
12#
 楼主| 发表于 2020-3-14 10:31:46 | 只看该作者
好的,我试一下哈,前辈

238

帖子

0

主题

0

精华

版主

World Analyser

F 币
642 元
贡献
470 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
11#
发表于 2020-3-13 17:10:50 | 只看该作者
主程序
call daysfromdate(1954,1,1,2007,12,31,0)
改为
  idays=0
  call daysfromdate(1954,1,1,2007,12,31,idays)
  print *, idays

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
10#
 楼主| 发表于 2020-3-12 12:31:24 | 只看该作者
fcode 发表于 2020-3-12 11:56
给出输入文件。

您好,前辈,由于原文件是1.08M的,所以我删去了几年的数据,格式什么的都没有变化,只是少了数行。

ztzl-1.txt

984.05 KB, 下载次数: 1

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

9#
发表于 2020-3-12 11:56:31 | 只看该作者
给出输入文件。

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
8#
 楼主| 发表于 2020-3-12 10:26:25 | 只看该作者
本帖最后由 kyra 于 2020-3-12 11:54 编辑

[Fortran] 纯文本查看 复制代码
Program main
use timer_supports
implicit none

  Integer,parameter :: length=1000
  integer i , f , idays
  integer d
  Character(LEN=length) A,B,Filename
  Integer(kind=4)::Column, Row, K,L
  integer , allocatable :: c( : , : )
  Column=0;Row=0;K=0;L=1;filename="ztzl-1.txt"
  Open (55,file=Filename)
  Read(55,'(a1000)') A
  column=GetDataN(A)!//改成这个函数,具体实现在下面的代码
  CLOSE(55)
  Open (55,file=Filename)
  Do
    Read(55,*,iostat=k) B
    If( k /= 0 ) Exit
    Row = Row + 1
  End Do
  Write(*,"(A5,I6,5X,A7,I2)") "Row=",Row,"Column=",Column!读取行数
  allocate(c(column-1,row))
  rewind(55)
  Do i = 1,Row
    read(55,*) d,c(:,i)!//1改成 i
  End Do
  Close(55)!将数据转化为数组
  
  call daysfromdate(1954,1,1,2007,12,31,0)
  print *, idays
contains

  Integer Function GetDataN( cStr )
    Character( Len = * ) , Intent( IN ) :: cStr
    Integer :: i
    Logical :: bIsSeparator , bIsQuote
    GetDataN = 0
    bIsSeparator = .TRUE.
    bIsQuote = .FALSE.
    Do i = 1 , Len_Trim( cStr )
      Select Case( cStr(i:i) )
      Case( '"' , "'" ) !// 如果遇到引号
        If ( .Not.bIsQuote ) GetDataN = GetDataN + 1  !//如果不在引号中,则增加一个数据
        bIsQuote = .Not.bIsQuote !// 引号结束或开始
        bIsSeparator = .FALSE.
      Case( " " , "," , char(9) ) !// 如果遇到分隔符
        If ( .Not.bIsQuote ) then  !// 分隔符如果不在引号中
          bIsSeparator = .TRUE.
        End If
      Case Default      
        If ( bIsSeparator ) then
          GetDataN = GetDataN + 1
        End If
        bIsSeparator = .FALSE.
      End Select
    End Do
  End Function GetDataN
End Program Main

这个代码主要就是您上次帮我改的,就做了一点儿改动,在改动之前是可以正常运行的,就是在开头加了一个use,然后在中间call了一下模块中的函数,我把这个模块也发给您。

mod_timer_supports.for

17.29 KB, 下载次数: 2

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

7#
发表于 2020-3-11 13:28:57 | 只看该作者
给出代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-7 08:44

Powered by Tencent X3.4

© 2013-2024 Tencent

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