如果程序遇到段故障 (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)