У меня возникли проблемы с освобождением и выделены аспекты части моего кода FORTRAN. в частности, я думаю, что проблема связана с распределением памяти из поиска в моем сообщении об ошибке в Интернете. Сообщение об ошибке говорит о недопустимых указателях, однако я не использую никаких указателей в своей программе.Проблемы с распределением и распределением памяти в FORTRAN
После завершения итерации № 2 моей петли f (см. Ниже) программа вылетает из системы или, скорее, большую часть времени, когда она сбой, а иногда он просто замерзает. Я уверен, что в этом суть ошибки. поскольку программа подходит к этому моменту.
У меня есть подпрограммы, которые не показаны, но поскольку они работают для других комбинаций симуляции, я уверенно уверен, что это не проблема. Я использую deallocate и выделяю в других местах в рамках программы (успешно), поэтому я удивлен, что он не работает здесь.
Я просто показываю часть программы для удобства чтения. в частности, я удалил свои вызовы в подпрограммы, которые я написал. Надеюсь, что я предоставил достаточную информацию для вас, программистов, чтобы помочь мне разобраться с проблемой. если нет, укажите, какую другую информацию вы хотите, и я буду рад выполнить ее. Я скомпилировал программу, используя различные параметры компилятора, и исправил некоторые ошибки и удалил все предупреждения. На данный момент, однако, параметры компилятора не дают мне больше информации.
allocate(poffvect(1:6))
allocate(phi1out(1:1))
allocate(phi2out(1:1))
allocate(phi1outs1(1:1))
allocate(phi2outs1(1:1))
dummy allocation
allocate(phi1outind(1:1))
allocate(phi2outind(1:1))
allocate(phi1outinds1(1:1))
allocate(phi2outinds1(1:1))
do e = 1, 6
print *,"e", e
do f = 1, 3
print *,"f", f, iteratst1(f), trim(filenumcharimp)
deallocate(phi1outinds1, STAT = AllocateStatus)
if (AllocateStatus /= 0) stop "Error during deallocation of phi1outinds1"
print *, "Allocatestatus of phi1outinds1 is", AllocateStatus
deallocate(phi2outinds1, STAT = AllocateStatus)
print *, "DeAllocatestatus of phi1outinds2 is", AllocateStatus
if (AllocateStatus /= 0) stop "Error during deallocation of phi2outinds1"
print *, "we deallocate f loop ok", iteratst1(f)
allocate(phi1outinds1(1:iteratst1(f)), STAT = AllocateStatus)
if (AllocateStatus /= 0) stop "Error during allocation of phi1outinds1"
allocate(phi2outinds1(1:iteratst1(f)), STAT = AllocateStatus)
if (AllocateStatus /= 0) stop "Error during deallocation of phi1outinds1"
end do
end do
опции компилятора
ifort -free -check -traceback -o adatptmultistage1new.out adatptmultistage1new.f90
выход
e 1
f 1 5000 43
DeAllocatestatus of phi1outinds1 is 0
DeAllocatestatus of phi1outinds2 is 0
we deallocate f loop ok 5000
f loop done 1
f 2 10000 43
Allocatestatus of phi1outinds1 is 0
DeAllocatestatus of phi1outinds2 is 0
we deallocate f loop ok 10000
f loop done 2
f 3 15000 43
Allocatestatus of phi1outinds1 is 0
сообщение об ошибке
*** glibc detected *** ./adatptmultistage1new.out: munmap_chunk(): invalid pointer: 0x0000000000d3ddd0 ***
======= Backtrace: =========
/lib/libc.so.6(+0x77806)[0x7f5863b7b806]
. /adatptmultistage1new.out[0x43247c]
. /adatptmultistage1new.out[0x404368]
./adatptmultistage1new.out[0x4031ec]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f5863b22c4d]
. /adatptmultistage1new.out[0x4030e9]
======= Memory map: ========
00400000-004d4000 r-xp 00000000 08:03 9642201
/home/jgold/smwcv/error_infect/test/surfaces/multistage/adaptonly/adatptmultistage1new.out
006d4000-006dc000 rw-p 000d4000 08:03 9642201
[Остальная часть сообщения об ошибке не показаны для краткости]
7fffb004d000-7fffb00bc000 rw-p 00000000 00:00 0 [stack]
7fffb01d7000-7fffb01d8000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted
Можете ли вы исправить форматирование исходного кода. Отступы тоже помогают. – Chris
http://sscce.org/ – eriktous
Вы не проверяете код состояния, возвращаемый любыми вашими инструкциями allocate или deallocate. Это может обеспечить полезную диагностическую информацию. –