|
本帖最后由 大橙子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中被调用,之后就没有了。
因为程序比较大所以只能这样描述一下,主要是希望有人能提供一下可能是哪里出错的思路。。
|
|