• ベストアンサー

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

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

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

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

#1 の onosuke さんが言われているとおりで、プログラムのバグが原因であることがほとんどでしょう。 移植によって、眠っていたバグが表面化することは珍しくないです。原因を突き止めるしかありません。 例えば、 char *p; *p = 1; としたときに、p が初期化されていないので、p の値は不定になりますよね?そうすると、*p = 1 がどこに書き込むかも不定になります。 不定といっても、乱数のようなものではなく、直前のコードで、ある程度固定した値になる可能性が高いです。コンパイラが違えば、その値が Segmentation fault になるかならないかの違いが出ることもあります。 Segmentation fault にならないと、気づかないうちに、別の変数を書き換えていたりすることもあるので、そちらの方が怖いです。

goma200
質問者

お礼

教えていただいたのに、お礼が遅くなり大変申し訳ありません。 私でもわかるように優しく丁寧に書いて下さってありがとうございます。一生懸命バグを探したいと思います。

その他の回答 (1)

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.1

第一に,コンパイラの吐く機械語のコードが違います。 ですから,ソースコードレベルでメモリアクセスのバグがあれば,質問のようなことは普通に起こります。

goma200
質問者

お礼

同じソースコードなのに不思議ですね。一つのプログラムを作りたいとき色々な書き方があるのと同じ感覚でしょうか? そう考えると納得ですね。 わかりやすい回答ありがとうございます。

関連するQ&A