如果程序遇到段故障 (SIGSEGV),便会引用其可用内存外的内存地址。
导致段故障的最常见原因:
数组索引的名称拼写错误。
调用例程的一个参数是 REAL,而被调用例程对应的参数却是 INTEGER。
数组索引计算错误。
调用例程的参数数量不足。
使用未定义的指针。
使用程序来生成段故障。
demo% cat WhereSEGV.f
INTEGER a(5)
j = 2000000
DO 9 i = 1,5
a(j) = (i * 10)
9 CONTINUE
PRINT *, a
END
demo%demo% f95 -g -silent WhereSEGV.f
demo% a.out
Segmentation fault
demo% dbx a.out
Reading symbolic information for a.out
program terminated by signal SEGV (segmentation violation)
(dbx) run
Running: a.out
signal SEGV (no mapping at the fault address)
in MAIN at line 4 in file "WhereSEGV.f"
4 a(j) = (i * 10)
(dbx)