dポイントプレゼントキャンペーン実施中!

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

A 回答 (3件)

デバッガを使おう。


「gcc デバッガ」で検索すると色々出てくる。
    • good
    • 2
この回答へのお礼

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

お礼日時:2006/01/25 21:15

gdb core


で、検索してみてください。

 どこの関数で、coreファイルが吐かれたかまで、
 おおよその範囲で終えます。
 参考URLに、まさに今回の件に該当する内容が
 記述されています。

 Solaris だと、pstack コマンド。

参考URL:http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/de …
    • good
    • 2
この回答へのお礼

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

お礼日時:2006/01/26 02:05

巨大な配列を使っていませんか?


配列のサイズが大きすぎると、個々のユーザに割り当てられた
スタックのサイズを超えてしまい、segmentation faultになります。

配列のサイズを小さくしてコンパイル→実行してみて、
うまくいくか確認してみてください。

うまくいくようなら、シェルのプロンプトから
ulimit -s unlimited
と打ち込んでから(スタックサイズを無制限にするコマンドです)
再度コンパイル→実行してみてください。
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/01/25 21:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!