Проблема с выделением памяти для выделяемого массива (реальный тип) - PullRequest
0 голосов
/ 07 марта 2019

Я новичок в программировании на Фортране, поэтому мне нужна помощь по распределенным массивам.

Это мой простой код:

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 Ответ

1 голос
/ 07 марта 2019

Как и в комментарии @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 !!!"
...