Я изменяю программу с открытым исходным кодом, и она падает при определенных настройках, когда выполняет очень простую строку.Я не могу понять, почему эта строка может вызвать сбой программы.Строка имеет вид
IF (allocated(bec%k)) DEALLOCATE(bec%k)
Эта строка выполняется несколько раз перед сбоем, но после определенного момента для определенных настроек программы происходит сбой программы.Потому что% k всегда выделяется при выполнении этой строки.Компилятор gfortran.
Вывод терминала, который появляется в результате ошибки, говорит:
free(): invalid next size (normal)
Program received signal SIGABRT: Process abort signal.
Backtrace for this error:
#0 0x7f428db872da in ???
#1 0x7f428db86503 in ???
#2 0x7f428cfe4f1f in ???
#3 0x7f428cfe4e97 in ???
#4 0x7f428cfe6800 in ???
#5 0x7f428d02f896 in ???
#6 0x7f428d036909 in ???
#7 0x7f428d03e0ac in ???
#8 0x56366a04e2b6 in __becmod_MOD_deallocate_bec_type
at /home/john/Desktop/q-e-qe-6.3/Modules/becmod.f90:401
#9 0x563669e734f4 in update_hamiltonian_
at /home/john/Desktop/ce-tddft-6.3-another-copy/src/update_ham.f90:61
#10 0x563669e7ab70 in molecule_optical_absorption_
at /home/john/Desktop/ce-tddft-6.3-another-copy/src/molecule_optical_absorption.f90:538
#11 0x563669e6e2c4 in tddft_main
at /home/john/Desktop/ce-tddft-6.3-another-copy/src/tddft_main.f90:118
#12 0x563669e6de6e in main
at /home/john/Desktop/ce-tddft-6.3-another-copy/src/tddft_main.f90:19
Я также получаю следующее сообщение об ошибке в файле вывода:
mpirun noticed that process rank 0 with PID 0 on node JohnUbuntu exited on signal 6 (Aborted).
Если вам интересно, вот подпрограмма, частью которой является линия, а также тип данных bec
!-----------------------------------------------------------------------
SUBROUTINE deallocate_bec_type (bec)
!-----------------------------------------------------------------------
!
USE mp, ONLY: mp_get_comm_null
IMPLICIT NONE
TYPE (bec_type) :: bec
!
bec%comm = mp_get_comm_null()
bec%nbnd = 0
!
IF (allocated(bec%r)) DEALLOCATE(bec%r)
IF (allocated(bec%nc)) DEALLOCATE(bec%nc)
IF (allocated(bec%k)) DEALLOCATE(bec%k)
!
RETURN
!
END SUBROUTINE deallocate_bec_type
TYPE bec_type
REAL(DP), ALLOCATABLE :: r(:,:) ! appropriate for gammaonly
COMPLEX(DP),ALLOCATABLE :: k(:,:) ! appropriate for generic k
COMPLEX(DP),ALLOCATABLE :: nc(:,:,:) ! appropriate for noncolin
INTEGER :: comm
INTEGER :: nbnd
INTEGER :: nproc
INTEGER :: mype
INTEGER :: nbnd_loc
INTEGER :: ibnd_begin
END TYPE bec_type
Любые предложения о том, что вызывает это или что делать, будут очень благодарны.