Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 可分配数组(实型)的内存分配问题_Fortran_Gfortran - Fatal编程技术网

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

Fortran 可分配数组(实型)的内存分配问题,fortran,gfortran,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_P

我是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对象既不是数据指针,也不是可分配变量

这个代码有什么问题

在这个简单的代码中可以隐藏哪些棘手的东西

IDE:代码::块TDM_GCC_5 1 0


OS:Win 10 X64

正如@Steve在评论中所说,分配/解除分配状态的关键字是
STAT
,而不是
status
。出现错误的原因是编译器无法识别该名称,并认为它是一个变量

此外,还有一个语法错误,因为
STOP
语句和开始大括号之间必须至少有一个空格(或者根本没有大括号)


我不知道代码::块,但我注意到您在分配和解除分配中使用了STATUS=术语。这是错误的,关键字是
STAT=
。这可能是chw21所说的,但是为什么不发布错误消息让我们看看呢?@monocharic由于我添加了错误消息,问题现在完成了。您的代码中有两个错误。首先,正如@chw21所指出的,您希望
STAT=
而不是
STATUS
。错误正确地指向
状态
。gfortran假定if是一个变量名。其次,
STOP
不使用意合。删除它们。@Steve我并没有从编译器那个里得到关于parathesis是语法错误的警告。为什么?我可以得到一个解释,因为我想知道原因。这并不是说不允许
STOP(“x”)
,而是必须写为
STOP“x”
,但是
STOP(“x”)
是不允许的。第一个有效,最后一个无效(放置空格)。这很奇怪。。。Fortran一般不区分空格,特别是大括号。这并不奇怪:它(以自由形式)与必须编写
real x
而不是
realx
100 continue
而不是
100 continue
没有什么区别。如果(x)是允许的,而
stop(x)
是不允许的,不同之处在于,在后一种情况下,
是常数
(x)
的一个组成部分,就像你不能让
停止1而不是
停止1
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 !!!"