可分配数组(实型)的内存分配问题

时间:2019-03-06 23:52:37

标签: fortran gfortran

我是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

1 个答案:

答案 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 !!!"