質問編集履歴
3
BA後の追記を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -102,4 +102,16 @@
|
|
102
102
|
> ./a
|
103
103
|
>
|
104
104
|
(標準入力を待たずに終了する)
|
105
|
-
```
|
105
|
+
```
|
106
|
+
|
107
|
+
# 追記3(BA後)
|
108
|
+
|
109
|
+
多くの方がご指摘いただいているとおり、原因はスタックオーバーフローによるものだと思われます。
|
110
|
+
|
111
|
+
vectorだとOKな理由は、vectorはヒープ領域だからなようです。
|
112
|
+
|
113
|
+
https://cpprefjp.github.io/reference/vector/vector.html
|
114
|
+
|
115
|
+
> 配列と違い、ストレージはvector自体が管理するため、自動的に領域の拡張が行われる。
|
116
|
+
|
117
|
+
皆様ご回答いただきありがとうございました。
|
2
「最適化されているのでは」という指摘に対する追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -49,7 +49,7 @@
|
|
49
49
|
# 追記[2020/09/21 19:36]
|
50
50
|
以下のように、`static int grid[1005][2005];`や`vector<vector<int>> grid(1005, vector<int>(2005, 0));`に変更したら標準入力を待つようになりました。
|
51
51
|
|
52
|
-
```
|
52
|
+
```cpp
|
53
53
|
/* d2.cpp*/
|
54
54
|
#include <bits/stdc++.h>
|
55
55
|
using namespace std;
|
@@ -67,4 +67,39 @@
|
|
67
67
|
solve();
|
68
68
|
return 0;
|
69
69
|
}
|
70
|
+
```
|
71
|
+
|
72
|
+
# 追記2[2020/09/21/ 19:51]
|
73
|
+
標準入力が最適化によって消えているのではないかという指摘がありましたので、以下のように`N`と`K`を出力するプログラムにしてみましたが、やはりプログラムは終了しました。
|
74
|
+
|
75
|
+
```cpp
|
76
|
+
// #include <bits/stdc++.h>
|
77
|
+
#include <iostream>
|
78
|
+
#include <vector>
|
79
|
+
using namespace std;
|
80
|
+
|
81
|
+
int solve(){
|
82
|
+
int N, K;
|
83
|
+
cin >> N >> K;
|
84
|
+
int grid[1005][2005]; // この行をコメントアウトすると、標準入力を待つようになる
|
85
|
+
// static int grid[1005][2005]; // OK
|
86
|
+
// vector<vector<int>> grid(1005, vector<int>(2005, 0)); // OK
|
87
|
+
cout << N+K << endl;
|
88
|
+
return N+K;
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
int main(int argc, char const *argv[]){
|
93
|
+
int ret;
|
94
|
+
ret = solve();
|
95
|
+
cout << ret << endl;
|
96
|
+
return 0;
|
97
|
+
}
|
98
|
+
```
|
99
|
+
|
100
|
+
```
|
101
|
+
> g++ abc/086/d2.cpp
|
102
|
+
> ./a
|
103
|
+
>
|
104
|
+
(標準入力を待たずに終了する)
|
70
105
|
```
|
1
コードをstatic や vectorにした場合の挙動を追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -44,4 +44,27 @@
|
|
44
44
|
|
45
45
|
原因がわかる方いらっしゃいますでしょうか?
|
46
46
|
|
47
|
-
よろしくお願いします。
|
47
|
+
よろしくお願いします。
|
48
|
+
|
49
|
+
# 追記[2020/09/21 19:36]
|
50
|
+
以下のように、`static int grid[1005][2005];`や`vector<vector<int>> grid(1005, vector<int>(2005, 0));`に変更したら標準入力を待つようになりました。
|
51
|
+
|
52
|
+
```
|
53
|
+
/* d2.cpp*/
|
54
|
+
#include <bits/stdc++.h>
|
55
|
+
using namespace std;
|
56
|
+
|
57
|
+
void solve(){
|
58
|
+
int N, K;
|
59
|
+
cin >> N >> K;
|
60
|
+
// int grid[1005][2005]; // この行をコメントアウトすると、標準入力を待つようになる
|
61
|
+
static int grid[1005][2005]; // OK
|
62
|
+
// vector<vector<int>> grid(1005, vector<int>(2005, 0)); // OK
|
63
|
+
}
|
64
|
+
|
65
|
+
|
66
|
+
int main(int argc, char const *argv[]){
|
67
|
+
solve();
|
68
|
+
return 0;
|
69
|
+
}
|
70
|
+
```
|