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