プロが教える店舗&オフィスのセキュリティ対策術

C言語のプログラムが実行できません。

コンパイルは出来るんですが、実行すると、「Segmentation fault」と表示されてしまいます。

これは何のエラーなんでしょうか?
基本的な事かもしれませんが、分かる方宜しくお願い致します。

A 回答 (2件)

僕も何度も出したなぁ。



ひとくちにSegmentation faultといっても、それこそさまざまな要因があるので、
これだけで原因を突き止めるのは非常に難しいです。

コンパイルはあくまで文法としてみているだけであり、
処理の流れ、メモリ確保など、プログラムそのものを見ているわけではありません。
このエラーが出るのは文法などよりもっと上位の原因なのです。
たとえばですが。
長さ10の配列があったとして、11番目以降を参照したりすると、
そういうのが出たような気がします。

ですから、変数があれば、その内容をprintf文で逐一出していき、
変な値が入っていないとか、少しずつ直していくしかないと思います。
    • good
    • 2
この回答へのお礼

ありがとうございます。
解決しました。
どうやら、プログラムの記述にミスがあり、ループがうまくいってなかったようです。

なるほど、勉強になりました。ありがとうございます。

お礼日時:2007/01/12 19:59

エラーの内容としては、


確保された安全な領域以外を参照したことによるエラーと捉えても良いと思います。
例えば、配列の添え字を間違えて確保されていない部分を参照したり、ポインタの演算を間違えてまったく関係ないところを参照したりしたときにも発生します。

原因を特定するとして、
仮に、Windows上のVisualC++などでデバッグモードで実行している場合などであれば、Segmentation faultが発生しているところで停止したりするので原因の特定が楽なのですが、
それ以外の環境で調査するとしたら、#1さんが書かれているように、ところどころにprintf等を入れて、変数の内容を出力させるなどして動作確認するしかないでしょう。
上記発生原因の例を参考に、配列の添え字や、ポインタ操作の度に内容確認されてはいかがでしょうか?
    • good
    • 1
この回答へのお礼

ありがとうございます。
解決しました。
メモリの確保も大事なんですね。
勉強になりました。本当にありがとうございました。

お礼日時:2007/01/12 20:01

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