某プロコンで巨大な配列が必要(だと感じた)になった。
int array[100000][100000];
これでコンパイルするとコンパイルは出来るが、実行できない。
もしかしてWindowsがイカれてしまったのかと思い、これからは静的メモリ確保ではなく動的メモリ確保で生きていこうと思っていたが、調べてみるとスタック領域という領域があるようである。
スタック領域とはざっくり言えば関数のスタックや自動変数を格納しておく領域のことである。(多分)
スタック領域はとても小さく、調べてみたところ自分の環境では約2MBほどだと思われる(gcc4.8.1)。
これをどうにかするにはstaticもしくはグローバル変数として宣言することによって静的領域に格納させる、動的確保で配列を作ることが挙げられる。
ちなみにこの問題ではr行c列ということになっていたので、GCCでは
int r, c; scanf("%d %d", &r, &c); int array[r][c];
も可能である。