我在MPI环境中测试一些软件(RedHat Centros)。我正在使用Totalview来调试脚本,但是我在一个完善的库中遇到了一个错误,即使使用调试器我也无法找到它。 错误:
*** glibc detected *** master.exe: munmap_chunk(): invalid pointer:
0x000000001584c510 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x75f3e)[0x2b27fb025f3e]
罪魁祸首脚本来自子例程cleanup()中的释放。脚本很长,所以将相关的行和变量与错误相关联。我发现仅通过使用Totalview来触发崩溃的线路。即使我已经编译了“traceback”它生成的跟踪不是代码中的行,而是libc.so和grib_api.so有很多十六进制信息:-( 我也对这类问题进行了一些研究,许多人建议寻找一个出界的错误。我用这个标志编译并检查了nch的大小,它从不超过5.所以我确定它不会写出界限。我正在使用英特尔编译器版本15.0.1.133。知道我能做些什么来找到这个问题的原因吗?
欣赏你对此的看法。
subroutine getem(...)
implicit none
INTEGER :: cha(5)
INTEGER, ALLOCATABLE :: id(:)
INTEGER :: nch
nch = 5
ALLOCATE(id(5),stat=err)
if(err .ne. 0) exit
id(1:nch) = cha(1:nch)) + 1
call cleanup()
contains
subroutine cleanup()
IF (ALLOCATED(id)) DEALLOCATE(id)
end subroutine cleanup
end subroutine getem