可分配数组(实型)的内存分配问题
Problem with memory allocation for allocatable array( real type )
我是 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: Code::Blocks TDM_GCC_5 1 0
OS: Win 10 X64
正如@Steve在评论中所说,allocation/deallocation状态的关键字是STAT
,而不是STATUS
。报错是因为编译器不认识名字,认为是变量。
此外,存在语法错误,因为 STOP
语句和左大括号之间必须至少有一个 space(或者根本没有大括号)。
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 !!!"
我是 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: Code::Blocks TDM_GCC_5 1 0
OS: Win 10 X64
正如@Steve在评论中所说,allocation/deallocation状态的关键字是STAT
,而不是STATUS
。报错是因为编译器不认识名字,认为是变量。
此外,存在语法错误,因为 STOP
语句和左大括号之间必须至少有一个 space(或者根本没有大括号)。
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 !!!"