Fortran Coder

查看: 2333|回复: 3
打印 上一主题 下一主题

[子程序] 数组作为子函数的形参时出现断点

[复制链接]

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
跳转到指定楼层
楼主
发表于 2022-5-11 16:39:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
module mod_parasetting
    integer,public::a
    contains
    subroutine parasetting()
    implicit none
    integer b
    a=3
    b=1
    return
    end subroutine parasetting
    end module mod_parasetting

module mod_sum
    contains
    subroutine summarization(s)
    use mod_parasetting,only:a
    implicit none
    integer s(a),d
    integer,external::summ
    d=2
    s=summ(d)
    return
    end subroutine summarization
    end module mod_sum
    
    function summ(d) result(r)
    use mod_parasetting,only:a
    implicit none
    integer d,c(a)
    integer r(a)
    integer i
    c=1
    do i=1,a
        r(i)=c(i)+d
    enddo
    return
    end function summ

program main
    use mod_parasetting
    use mod_sum
    implicit none
    integer,allocatable::s(:)
    call parasetting()
    allocate(s(a))
    call summarization(s)
    write(*,*) s
    end program main


如上述代码,我在mod_summ模块里定义了一个子函数summ,要输出的形参时r,是一个数组,为什么我在调试的时候,到计算r这一步会中断,然后显示:
forrtl: severe (157): Program Exception - access violation
我看到r这个数组是undefined address
为啥会这样呢,求助各位大佬!!感谢!!
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
沙发
 楼主| 发表于 2022-5-11 16:48:14 | 只看该作者
【补充】
我把子函数summ放在了mod_sum里面之后,就可以正常运行了。请问各位大佬,这是什么原理呢?

[Fortran] 纯文本查看 复制代码
module mod_sum
    contains
    subroutine summarization(s)
    use mod_parasetting,only:a
    implicit none
    integer s(a),d
    !integer summ
    d=2
    s=summ(d)
    return
    end subroutine summarization
    
    function summ(d) result(r)
    use mod_parasetting,only:a
    implicit none
    integer d,c(a)
    integer r(a)
    integer i
    c=1
    do i=1,a
        r(i)=c(i)+d
    enddo
    return
    end function summ
    end module mod_sum

167

帖子

2

主题

1

精华

大师

Vim

F 币
1012 元
贡献
484 点

规矩勋章

板凳
发表于 2022-5-11 18:55:42 | 只看该作者
返回数组需要显式接口。module包含了显式接口。

评分

参与人数 1F 币 +2 收起 理由
fcode + 2 正解

查看全部评分

28

帖子

10

主题

0

精华

熟手

F 币
140 元
贡献
81 点
地板
 楼主| 发表于 2022-5-12 15:44:28 | 只看该作者
Transpose 发表于 2022-5-11 18:55
返回数组需要显式接口。module包含了显式接口。

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

本版积分规则

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

GMT+8, 2024-11-23 20:21

Powered by Tencent X3.4

© 2013-2024 Tencent

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