• ベストアンサー

セグメンテーション違反について

C言語であるプログラムを作っています。コンパイルは上手くできるのですが、実行するとセグメンテーション違反と出てしまいます。それもセグメンテーション違反と出るときと出ないときがあり困っています。そこでプログラム中のどこがセグメンテーション違反を指しているのか知りたいのですが、何かセグメンテーション違反の場所を教えてくれるようなオプションはないでしょうか? プログラムソースを見てもらうのが一番いいと思いますが、行数が1000行を超えているので断念しました。OSはLinuxでコンパイラはgccです。どなたかご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

デバッガを使おう。 「gcc デバッガ」で検索すると色々出てくる。

zunzunzunzunzun
質問者

お礼

早速の回答ありがとうございます。「gcc デバッガ」で検索したらデバッグのやり方が分かりました。早速どこが悪いのか調べてみます。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

gdb core で、検索してみてください。  どこの関数で、coreファイルが吐かれたかまで、  おおよその範囲で終えます。  参考URLに、まさに今回の件に該当する内容が  記述されています。  Solaris だと、pstack コマンド。

参考URL:
http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/debug.html
zunzunzunzunzun
質問者

お礼

回答ありがとうございます。coreを吐かせて原因をさぐってみようと思います。参考URLも活用させていただきます。ありがとうございました。

すると、全ての回答が全文表示されます。
  • kochory
  • ベストアンサー率45% (167/370)
回答No.1

巨大な配列を使っていませんか? 配列のサイズが大きすぎると、個々のユーザに割り当てられた スタックのサイズを超えてしまい、segmentation faultになります。 配列のサイズを小さくしてコンパイル→実行してみて、 うまくいくか確認してみてください。 うまくいくようなら、シェルのプロンプトから ulimit -s unlimited と打ち込んでから(スタックサイズを無制限にするコマンドです) 再度コンパイル→実行してみてください。

zunzunzunzunzun
質問者

お礼

早速の回答ありがとうございます。配列はint tekitou [2000]を6回ぐらい宣言していました。そこで配列のサイズを半分の1000にしてみたんですが、セグメンテーション違反とでてしまいました。

すると、全ての回答が全文表示されます。

関連するQ&A