5


1

セグメンテーション違反が発生するのはなぜですか?

私はc ++で単純なhello world関数をコンパイルしようとしています。 コンパイルした後、実行して「セグメンテーションフォールト」を取得します。 誰かがこれに光を当てることはできますか?

次のコマンドを使用して、Linuxコマンドラインからこれをコンパイルしています。

_ g hello.cpp _

#include

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

4 Answer


6


プログラム自体はOKです。 コンパイル環境にセグメンテーション違反を引き起こしている奇妙なことがあると思います。

最善の策は、これをデバッガー(gdb)で実行することです。これにより、どこでクラッシュしているのかがわかり、問題の原因を突き止めることができます。

これを行うには、次のようにコンパイルします。

g++ -g -o hello hello.cpp

次に、gdbを実行します。

gdb hello

そして、gdbプロンプトでタイプ

run

プログラムを実行します。 クラッシュしたら、次を入力します

bt

スタックトレースが得られ、何が起こっているのかを把握するのに役立ちます。


1


そのコードには何の問題もないので、まずコンパイラーを、次にハードウェアを調査する必要があります。


1


このようにコンパイルします

g ++ -Bstatic -static hello.cpp

そして、。/ a.outを実行します

これがセグフォールトでない場合、LD_LIBRARY_PATHが原因です。


0


これはロングショットかもしれませんが、 `int main()`を `int main(int argc、char * argv [])`に変更してみてください