質問: WSLでubuntuを動かし、外部の計算サーバーにsshで接続しています。 以下のコードを実行するとSegmentation falutが出ます。 Nに標準入力を渡す暇なくエラーが出ています。 ``` #include int main(){ int N; std::cin>>N; int a[101][151][301]; return 0; } ``` 以下のように実行しています。 ``` g++ main.cpp ./a.out Segmentation fault ``` どこでSegmentation faultが出ているのかご教示ください。 下のコードの場合は問題なく実行されます。こちらの場合はNに標準入力を渡すことができます。 ``` #include int main(){ int N; std::cin>>N; return 0; } ```
回答: > > int a[101][151][301]; > > > サイズがでかすぎです。 こういうのはローカル変数ではダメなので、グローバル変数にしましょう ちと解説しときますと、ローカル変数はスタック領域に確保されます 通常はスタック領域というのは数MByte程度しか確保されてませんので、それを超える領域を確保しようとするとコケてしまう、ってことですね グローバル変数であれば、ヒープ領域に確保されますんで、数GByteは大丈夫、ということになります