質問編集履歴

3

BA後の追記を追加

2020/09/21 11:26

投稿

takey
takey

スコア312

test CHANGED
File without changes
test CHANGED
@@ -207,3 +207,27 @@
207
207
  (標準入力を待たずに終了する)
208
208
 
209
209
  ```
210
+
211
+
212
+
213
+ # 追記3(BA後)
214
+
215
+
216
+
217
+ 多くの方がご指摘いただいているとおり、原因はスタックオーバーフローによるものだと思われます。
218
+
219
+
220
+
221
+ vectorだとOKな理由は、vectorはヒープ領域だからなようです。
222
+
223
+
224
+
225
+ https://cpprefjp.github.io/reference/vector/vector.html
226
+
227
+
228
+
229
+ > 配列と違い、ストレージはvector自体が管理するため、自動的に領域の拡張が行われる。
230
+
231
+
232
+
233
+ 皆様ご回答いただきありがとうございました。

2

「最適化されているのでは」という指摘に対する追記

2020/09/21 11:26

投稿

takey
takey

スコア312

test CHANGED
File without changes
test CHANGED
@@ -100,7 +100,7 @@
100
100
 
101
101
 
102
102
 
103
- ```
103
+ ```cpp
104
104
 
105
105
  /* d2.cpp*/
106
106
 
@@ -137,3 +137,73 @@
137
137
  }
138
138
 
139
139
  ```
140
+
141
+
142
+
143
+ # 追記2[2020/09/21/ 19:51]
144
+
145
+ 標準入力が最適化によって消えているのではないかという指摘がありましたので、以下のように`N`と`K`を出力するプログラムにしてみましたが、やはりプログラムは終了しました。
146
+
147
+
148
+
149
+ ```cpp
150
+
151
+ // #include <bits/stdc++.h>
152
+
153
+ #include <iostream>
154
+
155
+ #include <vector>
156
+
157
+ using namespace std;
158
+
159
+
160
+
161
+ int solve(){
162
+
163
+ int N, K;
164
+
165
+ cin >> N >> K;
166
+
167
+ int grid[1005][2005]; // この行をコメントアウトすると、標準入力を待つようになる
168
+
169
+ // static int grid[1005][2005]; // OK
170
+
171
+ // vector<vector<int>> grid(1005, vector<int>(2005, 0)); // OK
172
+
173
+ cout << N+K << endl;
174
+
175
+ return N+K;
176
+
177
+ }
178
+
179
+
180
+
181
+
182
+
183
+ int main(int argc, char const *argv[]){
184
+
185
+ int ret;
186
+
187
+ ret = solve();
188
+
189
+ cout << ret << endl;
190
+
191
+ return 0;
192
+
193
+ }
194
+
195
+ ```
196
+
197
+
198
+
199
+ ```
200
+
201
+ > g++ abc/086/d2.cpp
202
+
203
+ > ./a
204
+
205
+ >
206
+
207
+ (標準入力を待たずに終了する)
208
+
209
+ ```

1

コードをstatic や vectorにした場合の挙動を追記

2020/09/21 10:53

投稿

takey
takey

スコア312

test CHANGED
File without changes
test CHANGED
@@ -91,3 +91,49 @@
91
91
 
92
92
 
93
93
  よろしくお願いします。
94
+
95
+
96
+
97
+ # 追記[2020/09/21 19:36]
98
+
99
+ 以下のように、`static int grid[1005][2005];`や`vector<vector<int>> grid(1005, vector<int>(2005, 0));`に変更したら標準入力を待つようになりました。
100
+
101
+
102
+
103
+ ```
104
+
105
+ /* d2.cpp*/
106
+
107
+ #include <bits/stdc++.h>
108
+
109
+ using namespace std;
110
+
111
+
112
+
113
+ void solve(){
114
+
115
+ int N, K;
116
+
117
+ cin >> N >> K;
118
+
119
+ // int grid[1005][2005]; // この行をコメントアウトすると、標準入力を待つようになる
120
+
121
+ static int grid[1005][2005]; // OK
122
+
123
+ // vector<vector<int>> grid(1005, vector<int>(2005, 0)); // OK
124
+
125
+ }
126
+
127
+
128
+
129
+
130
+
131
+ int main(int argc, char const *argv[]){
132
+
133
+ solve();
134
+
135
+ return 0;
136
+
137
+ }
138
+
139
+ ```