为什么以下代码在编译时会导致分段错误ifort
?
! testtrb.f90
program testtrb
call tracebackqq() ! This is for ifort
!call backtrace() ! This is for gfortran
print '(/1A/)', 'Finish.'
end program testtrb
执行
ifort testtrb.f90 ; ./a.out
,我得到了
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image PC Routine Line Source
a.out 0000000000409FFA Unknown Unknown Unknown
libpthread-2.31.s 00007F6E2C9903C0 Unknown Unknown Unknown
a.out 000000000040746D Unknown Unknown Unknown
a.out 000000000040383B Unknown Unknown Unknown
a.out 00000000004037E2 Unknown Unknown Unknown
libc-2.31.so 00007F6E2C7B00B3 __libc_start_main Unknown Unknown
a.out 00000000004036EE Unknown Unknown Unknown
的回报ifort --version
是ifort (IFORT) 19.1.1.217 20200306
。我也试过
ifort (IFORT) 2021.1 Beta 20201112
了,结果差不多。的值uname -r
是5.9.0-050900-generic
,如果它有帮助的话。
但是,更改tracebackqq
为backtrace
并运行gfortran testtrb.f90 ; ./a.out
,我得到
#0 0x7f789588ad3a
#1 0x557b8f35119d
#2 0x557b8f351254
#3 0x7f789569f0b2
#4 0x557b8f3510cd
#5 0xffffffffffffffff
Finish.
这似乎是正确的。
那么为什么会tracebackqq
产生SIGSEGV呢?
任何意见或批评将不胜感激。谢谢。