teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

誤字修正。

2020/09/21 11:22

投稿

hidezzz
hidezzz

スコア1248

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

表現ちょっと修正。

2020/09/21 11:22

投稿

hidezzz
hidezzz

スコア1248

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