Фортран, двойное освобождение или коррупция (! Prev) (дискриминатор 2) - PullRequest
0 голосов
/ 03 мая 2018

У меня небольшая проблема с запуском моего кода FORTRAN.

Эта ошибка возникает, когда я пытаюсь ДЕЗАКЛЮЧИТЬ определенную переменную.

На самом деле я понятия не имею, как найти способ решить мою проблему ...

Мое сообщение об ошибке следующее:

Error in `my_app.x': double free or corruption (!prev): 0x00000000042e5520 **
Program received signal SIGABRT: Process abort signal.
#8  0x6F692B in __My_mod_deallocate_VARIABLE at deallocate_VARIABLE.f:415 (discriminator 2)

Для решения моей проблемы я использовал всевозможные опции компилятора GNU FORTRAN:

-g -Wall -fbacktrace -finit-local-zero -ffpe-trap=invalid,zero,overflow  -fbounds-check -fcheck=all 

И я на самом деле пытаюсь напечатать другое значение:

Во-первых, когда я размещаю свою переменную:

  INTEGER, ALLOCATABLE,DIMENSION(:) ::   MY_VARIABLE 
  ALLOCATE(MY_VARIABLE (257))
  MY_VARIABLE = 0

  WRITE(7,*), 'IAM ALLOCATIONG MY VARIABLE'
  IF (ALLOCATED (MY_VARIABLE)) WRITE(7,*), 'MY_VARIABLE_ALLOCATED ','OUI'
  IF (.NOT.ALLOCATED(MY_VARIABLE)) WRITE(7,*),'MY_VARIABLE ','NON'
  WRITE(7,*),'09 LOC(MY_VARIABLE   )',LOC( MY_VARIABLE    )
  WRITE(7,*), '09 SHAPE  (MY_VARIABLE)',  SHAPE(MY_VARIABLE)
  WRITE(7,*), '09 LBOUND (MY_VARIABLE)', LBOUND(MY_VARIABLE)
  WRITE(7,*), '09 UBOUND (MY_VARIABLE)', UBOUND(MY_VARIABLE)

И у меня есть удовлетворительный результат:

IAM ALLOCATIONG MY VARIABLE
 09 MY_VARIABLE_ALLOCATED    OUI     
 09 LOC(MY_VARIABLE   )             76719840
 09 SHAPE  (MY_VARIABLE)         257
 09 LBOUND (MY_VARIABLE)           1
 09 UBOUND (MY_VARIABLE)         257

Затем выполняются некоторые подпрограммы, и до окончания выполнения я хочу освободить MY_VARIABLE.

Непосредственно перед освобождением моей переменной я выполняю еще один тест:

  WRITE(7,*), 'IAM DEALLOCATIONG MY VARIABLE'
  IF (ALLOCATED (MY_VARIABLE)) WRITE(7,*), 'MY_VARIABLE_ALLOCATED ','OUI'
  IF (.NOT.ALLOCATED(MY_VARIABLE)) WRITE(7,*),'MY_VARIABLE ','NON'
  WRITE(7,*),'09 LOC(MY_VARIABLE   )',LOC( MY_VARIABLE    )
  WRITE(7,*), '09 SHAPE  (MY_VARIABLE)',  SHAPE(MY_VARIABLE)
  WRITE(7,*), '09 LBOUND (MY_VARIABLE)', LBOUND(MY_VARIABLE)
  WRITE(7,*), '09 UBOUND (MY_VARIABLE)', UBOUND(MY_VARIABLE)

И снова результат:

IAM DEALLOCATIONG MY VARIABLE
 09 MY_VARIABLE_ALLOCATED    OUI     
 09 LOC(MY_VARIABLE   )             76719840
 09 SHAPE  (MY_VARIABLE)         257
 09 LBOUND (MY_VARIABLE)           1
 09 UBOUND (MY_VARIABLE)         257

Затем я использую оператор FORTRAN DEALLOCATING:

  DEALLOCATE( MY_VARIABLE ) 

И, к сожалению, у меня ошибка при запуске.

Кто-нибудь знает, как решить эту ошибку? Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...