我是Fortran编程的新手,所以我需要有关可分配数组的帮助。
这是我的简单代码:
PROGRAM MY_SIMPLE_CODE
IMPLICIT NONE
INTEGER :: N_TMP, ALLOC_ERR, DEALLOC_ERR
REAL, ALLOCATABLE, DIMENSION(:) :: P_POT
WRITE( *,* ) "ENTER THE VALUE FOR N_TMP:"
READ( *,* ) N_TMP
IF ( .NOT. ALLOCATED( P_POT) ) ALLOCATE( P_POT( N_TMP), STATUS = ALLOC_ERR )
IF ( ALLOC_ERR .NE. 0 ) STOP( "ERROR - ALLOCATION P_POT !!!")
IF ( ALLOCATED( P_POT) ) DEALLOCATE( P_POT, STATUS = DEALLOC_ERR )
IF ( DEALLOC_ERR .NE. 0 ) STOP( "ERROR - DEALLOCATION P_POT !!!")
END PROGRAM MY_SIMPLE_CODE
当我共同构建此代码时,我收到以下错误消息:
Allocate-object is neither a data pointer nor an allocatable variable
此代码有什么问题?
用这种简单的代码可以掩盖什么棘手的东西?
IDE:代码::块TDM_GCC_5 1 0
操作系统:Win 10 X64
答案 0 :(得分:1)
就像@Steve在评论中说的那样,分配/取消分配状态的关键字是STAT
,而不是STATUS
。出现错误是因为编译器无法识别名称,并认为它是变量。
此外,存在语法错误,因为STOP
语句和左括号之间必须至少有一个空格(或根本没有括号)。
IF ( .NOT. ALLOCATED( P_POT) ) ALLOCATE( P_POT( N_TMP), STAT = ALLOC_ERR )
IF ( ALLOC_ERR .NE. 0 ) STOP "ERROR - ALLOCATION P_POT !!!"
!(...)
IF ( ALLOCATED( P_POT) ) DEALLOCATE( P_POT, STAT = DEALLOC_ERR )
IF ( DEALLOC_ERR .NE. 0 ) STOP "ERROR - DEALLOCATION P_POT !!!"