• ベストアンサー

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

C言語のプログラムが実行できません。 コンパイルは出来るんですが、実行すると、「Segmentation fault」と表示されてしまいます。 これは何のエラーなんでしょうか? 基本的な事かもしれませんが、分かる方宜しくお願い致します。

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

  • ベストアンサー
  • suzu_zou
  • ベストアンサー率34% (112/327)
回答No.1

僕も何度も出したなぁ。 ひとくちにSegmentation faultといっても、それこそさまざまな要因があるので、 これだけで原因を突き止めるのは非常に難しいです。 コンパイルはあくまで文法としてみているだけであり、 処理の流れ、メモリ確保など、プログラムそのものを見ているわけではありません。 このエラーが出るのは文法などよりもっと上位の原因なのです。 たとえばですが。 長さ10の配列があったとして、11番目以降を参照したりすると、 そういうのが出たような気がします。 ですから、変数があれば、その内容をprintf文で逐一出していき、 変な値が入っていないとか、少しずつ直していくしかないと思います。

kick123
質問者

お礼

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

その他の回答 (1)

回答No.2

エラーの内容としては、 確保された安全な領域以外を参照したことによるエラーと捉えても良いと思います。 例えば、配列の添え字を間違えて確保されていない部分を参照したり、ポインタの演算を間違えてまったく関係ないところを参照したりしたときにも発生します。 原因を特定するとして、 仮に、Windows上のVisualC++などでデバッグモードで実行している場合などであれば、Segmentation faultが発生しているところで停止したりするので原因の特定が楽なのですが、 それ以外の環境で調査するとしたら、#1さんが書かれているように、ところどころにprintf等を入れて、変数の内容を出力させるなどして動作確認するしかないでしょう。 上記発生原因の例を参考に、配列の添え字や、ポインタ操作の度に内容確認されてはいかがでしょうか?

kick123
質問者

お礼

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

関連するQ&A

  • C言語でプログラムを書いています

    C言語でプログラムを書いています コンパイルに成功し、実行すると 「****.exeは動作を停止しました」 というエラーが出て、実行が強制終了されてしまいます このエラーはどのような場合に出るものであって、その解決法などご存知の方がいたら 教えていただきたいと思います 解説が載っているHPのURLでも構いませんので、よろしくお願いします

  • fortranでプログラムをつくったのですが

    fortranでプログラムをつくりました。 コンパイルは成功しているのですが、プログラムが途中で止まってしまいます。 そして「segmentation fault」とエラーが出ます。 このエラーは何を意味しているのでしょうか?

  • C言語による実行

    C言語で記述したソースプログラムを入手しました。これをコンパイルして実行する具体的な方法を教えて下さい。私は、MS-Fortran,FBASICのソースプログラムからコンパイルし、実行することをしております。

  • GNUコンパイラとIntelコンパイラの違いについて

    今回fortranとC言語で書かれたWindows用プログラムをLinux用に移植することになりました。GNUのコンパイラを使用し無事コンパイルできたので実行したのですが"Segmentation fault"となりうまく実行できませんでした。そこで試しにIntelのコンパイラを使用しコンパイルしてみたところGNUのときとは違い"Segmentation fault"とは出ず、プログラム内のエラーチェックに引っかかり止ってしまいました。同じソースコードにもかかわらず止まる箇所が異なります。 今まで考えたことがなかったのですがGNUとIntelのコンパイラの違いはなんなのでしょうか?また、この二つ以外にいいコンパイラはあるのでしょうか?

  • プログラム実行時にわからないエラーメッセージが出ました

    書いたプログラムをcygwinでコンパイルし実行してみたのですが 数値を入力していくと次のようなエラーメッセージが出ました。 エラーの意味と、可能なら解決法をおしえていただきたいです。 よろしくお願いします。 12 [main] so 3092 _cygtls::handle_exceptions: Error while dumping state ( probably corrupted stack) Segmentation fault (core dumped)

  • Cプログラムの問題点

    C言語で数値計算に関するプログラムを作ったのですが、cygwinで実行すると次のようなコメントが出ます。 5 [main] a 4772 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack) Segmentation fault (core dumped) 初心者なので、ところどころミスを発見しては直していたのですが、この問題は調べてみてもプログラムによって異なるみたいなので、質問した次第です。誤りがありましたら、ご指摘ください。

  • C言語について

    最近C言語でプログラミングを試みようとしてるのですが、コンパイルの時点でよく分かりません。 どのようなソフトでどのようにインストール・設定し、どのようにコンパイルするかなど、C言語でのプログラムのコンパイルから実行までを詳しく教えてください。

  • C言語とC++言語

    C言語でコンパイルできC++でコンパイルできないプログラムとその逆でC++でコンパイルできC言語でコンパイルできないプログラムを教えてください。よろしく

  • C言語での実行

    C言語(ボーランドのCpad)を使っています。 いつも使ってるパソコンと違うパソコンでC言語のプログラムをし始めました。 前のパソコンと同じようにプログラムのコードをCファイルで保存して同じように新しいパソコンから開いて同じように実行ボタン押したのですが、実行できず、exeファイルが存在しませんって表示されます。 ちなみに、動かすプログラムは4つあり、そのうちの3つはちゃんと実行でき、ファイルも作成できるのですが、同じ方法でやってるあと1つのプログラムだけがうまくいきません。 4つとも同じフォルダにするようにしていて、3つはちゃんと実行できるので、フォルダが違うことはないと思います。 なぜ「exeファイルが存在しません」ってなるのか。 ちゃんとフォルダにCファイルはあるのに。 ちなみに、正確にできる3つのように、実行できると「OBJファイル」とか「アプリケーション」とかも同時に作成されます。 ただ、問題の1つのプログラムは当然、実行できず、exeファイルが存在しませんって表示されるので何も作成されません。 ボーランドのC言語、実行、ファイル、など詳しい方ぜひ教えて下さい。 同じやり方で今までのパソコンではできていたのに、パソコン変えると実行できなくなります。 フォルダやCファイルが正確ではないのかとも思いましたが、前までのパソコン通りにやっているので問題ないと思います。 ぜひアドバイス下さい。

  • C言語の実行モジュール、コンパイル

    2点程、教えて頂きたい事があります。 よろしくお願いします。 (1)Solaris9でC言語でコンパイルされた実行モジュールを、そのままSolaris10にコピーし実行した場合、実行できるのでしょうか? (2)Solaris10で、makefile等を利用しC言語のコンパイルをしようと思うのですが、Solaris10がインストールされた段階で既にコンパイルする環境は整っているのでしょうか?。それともCD等からコンパイル環境をインストールしないといけないのでしょうか?(Solarisメディアが無い場合にコンパイル可能でしょうか?)