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

質問編集履歴

3

BA後の追記を追加

2020/09/21 11:26

投稿

takey
takey

スコア312

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

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

2020/09/21 11:26

投稿

takey
takey

スコア312

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にした場合の挙動を追記

2020/09/21 10:53

投稿

takey
takey

スコア312

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
+ ```