Fortran Coder

查看: 9330|回复: 4
打印 上一主题 下一主题

[求助] 把子程序的局部变量定义到mod中作为全局变量后运行出错

[复制链接]

13

帖子

5

主题

0

精华

入门

F 币
81 元
贡献
48 点
跳转到指定楼层
楼主
发表于 2020-4-6 20:14:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 大橙子cqx 于 2020-4-6 20:19 编辑

因为一些原因我需要把一些局部变量改写成全局变量,比如下面:
MODULE dynspg
CONTAINS:
    SUBROUTINE dyn_spg_ts( kt )
           REAL(wp), DIMENSION(jpi,jpj) :: zCdU_u, zCdU_v         
           ....
这两个变量我想定义在MODULE下作为全局变量,因为我把这个名为dyn_spg_ts的子程序拆分成了好几个子程序,而这两个变量是要在这些子程序之间传递的。
但是当我把他们写成:
       REAL(wp), ALLOCATABLE, PUBLIC, DIMENSION(:,:) :: zCdU_u, zCdU_v
然后放在MODULE下时,编译通过但是运行时会报错:

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

Backtrace for this error:
#0  0x7FE6046E5C57
#1  0x7FE6046E4E50
#2  0x3CF7C358EF
#3  0x7F3662 in __dynspg_ts_MOD_dyn_drg_init
#4  0x818012 in __dynspg_ts_MOD_dynspg_ts1
#5  0x820425 in __dynspg_ts_MOD_dyn_spg_ts
#6  0x7EA57B in __dynspg_MOD_dyn_spg
#7  0x46A847 in __step_MOD_stp
#8  0x41ADA0 in __nemogcm_MOD_nemo_gcm


这两个变量在我拆的子程序的第一部分dynspg_ts1中被用到的部分是:CALL dyn_drg_init( zu_frc, zv_frc,  zCdU_u, zCdU_v )
SUBROUTINE dyn_drg_init的部分结构为:
SUBROUTINE dyn_drg_init( pu_RHSi, pv_RHSi, pCdU_u, pCdU_v )
    REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   pCdU_u , pCdU_v
    pCdU_u = ....
然后这两个变量在dynspg_ts3中被调用,之后就没有了。
因为程序比较大所以只能这样描述一下,主要是希望有人能提供一下可能是哪里出错的思路。。

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

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
沙发
发表于 2020-4-7 09:57:36 | 只看该作者
FAQ之 常见错误分析
http://fcode.cn/guide-36-1.html

13

帖子

5

主题

0

精华

入门

F 币
81 元
贡献
48 点
板凳
 楼主| 发表于 2020-4-7 10:46:47 | 只看该作者
li913 发表于 2020-4-7 09:57
FAQ之 常见错误分析
http://fcode.cn/guide-36-1.html

谢谢你的解答,我刚刚发现问题是出在这些数组没有DEALLOCATE上。我之前曾经认为是数组没有分配的问题,所以尝试去ALLOCATE数组 但是运行时会报错说重复分配已分配的数组 让我以为这个思路是错的 后来才发现是没有释放内存导致的。。我猜测说重复分配的原因可能是因为这个程序会执行多次 希望可以给遇到相同问题的人一点思路。。

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
地板
发表于 2020-4-7 12:41:09 | 只看该作者
你可以先分配,在执行这个程序,完了再释放。或者在程序里分配、使用、释放。

13

帖子

5

主题

0

精华

入门

F 币
81 元
贡献
48 点
5#
 楼主| 发表于 2020-4-7 17:25:49 | 只看该作者
li913 发表于 2020-4-7 12:41
你可以先分配,在执行这个程序,完了再释放。或者在程序里分配、使用、释放。 ...

感谢 已经解决了!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-28 07:33

Powered by Tencent X3.4

© 2013-2024 Tencent

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