我在解除分配和分配部分FORTRAN代碼的方面時遇到問題。特別是,我認爲這個問題與搜索網絡上的錯誤消息時的內存分配有關。該錯誤消息談到無效指針,但是,我沒有在我的程序中使用任何指針FORTRAN中的釋放和內存分配問題
完成我的f循環的迭代#2(見下文)後,程序崩潰,或者大部分時間崩潰,有時它只是凍結了。我相信這是錯誤所在。隨着程序運行到這一點。
我有子程序沒有顯示,但由於他們工作其他模擬組合,我有理由相信,他們不是問題。我正在使用釋放並在程序中的其他地方分配(成功),所以我很驚訝它不在這裏工作。
我只顯示部分程序以方便閱讀。特別是我刪除了我寫給我編寫的子程序的電話。我希望我已經爲程序員提供了足夠的信息來幫助我找出問題所在。如果不是,請說明你想要的其他信息,我會很樂意遵守。我使用各種編譯器選項編譯了該程序,並修復了一些錯誤並刪除了任何警告。但是,在這一點上,編譯器選項不會給我更多的信息。
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 2012-04-04 21:25:35
http://sscce.org/ – eriktous 2012-04-04 23:49:48
您不檢查任何分配或釋放語句返回的狀態代碼。這樣做可能會提供一些有用的診斷信息。 – 2012-04-05 05:03:11