ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3: dbx コマンドによるデバッグ Oracle Solaris Studio 12.3 Information Library (日本語) |
プログラムでセグメント不正 (SIGSEGV) が発生するのは、プログラムが使用可能なメモリー範囲外のメモリーアドレスを参照したことを示します。
セグメント不正の主な原因を次に示します。
配列インデックス名のつづりが間違っている。
呼び出し元のルーチンでは引数に REAL を使用しているが、呼び出し先のルーチンでは INTEGER が使われている。
配列インデックスの計算が間違っている。
呼び出し元ルーチンの引数が足りない。
ポインタを定義しないで使用している。
問題のあるソース行を見つけるには、dbx を使用してセグメント例外が発生したソースコード行を検出します。
プログラムを使ってセグメント例外を生成します。
demo% cat WhereSEGV.f INTEGER a(5) j = 2000000 DO 9 i = 1,5 a(j) = (i * 10) 9 CONTINUE PRINT *, a END demo%
dbx を使用してセグメント例外が発生した行番号を検出します。
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)