回答編集履歴
2
誤字修正。
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
関数の内部で「int grid[1005][2005];」のように変数宣言するとauto変数となりスタック領域に確保されますが、そのスタックサイズを越えてしまって誤動作を起こしているのだと思います。
|
2
2
|
|
3
|
-
gridという変数領域がどういうライフタイムを持つのか(持たせたいか)によって対処方法は
|
3
|
+
gridという変数領域がどういうライフタイムを持つのか(持たせたいか)によって対処方法は変わると思います。
|
4
4
|
|
5
5
|
今の提示ソースのようにsolve()関数が呼ばれるたびに変数領域が確保されsolve()が終了した際に消滅して構わないのであれば、その位置で宣言すること自体は正しいのですが、スタックを極力消費しない方法で確保する必要があります。(vectorを使うのもひとつの方法です。)
|
6
6
|
|
1
表現ちょっと修正。
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
gridという変数領域がどういうライフタイムを持つのか(持たせたいか)によって対処方法は代わると思います。
|
4
4
|
|
5
|
-
今の提示ソースのようにsolve()関数が呼ばれるたびに変数領域が確保されsolve()が終了した際に消滅して構わないのであれば、その位置で宣言すること自体は正しいのですが、スタックを
|
5
|
+
今の提示ソースのようにsolve()関数が呼ばれるたびに変数領域が確保されsolve()が終了した際に消滅して構わないのであれば、その位置で宣言すること自体は正しいのですが、スタックを極力消費しない方法で確保する必要があります。(vectorを使うのもひとつの方法です。)
|
6
6
|
|
7
7
|
gridの領域確保が全体で1回だけ必要でプログラムの開始から終了まで存在し続けるという使い方ならば、関数の外側で宣言すれば良いです(その際ただのグローバル変数ではなく、classに隠蔽したりしたほうが良いかもしれませんが)。これならばスタックサイズと関係なく確保されます。
|
8
8
|
|