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

質問編集履歴

15

説明の追加

2020/06/22 00:59

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,8 @@
6
6
  Line 924: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
7
7
  SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h:933:9
8
8
  ```
9
+ 違う値をコードのテストに使用した場合にエラーが起きています
9
- ![違う値をコードのテストに使用した場合にエラーが起きています。](571a5ce2858ee1c2bce0731a0bb11963.png)
10
+ ![](571a5ce2858ee1c2bce0731a0bb11963.png)
10
11
 
11
12
  [コーディングインタビュー練習サイトの問題のリンク](http://leetcode.com/problems/merge-sorted-array/)
12
13
 

14

説明の追加

2020/06/22 00:59

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,7 @@
6
6
  Line 924: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
7
7
  SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h:933:9
8
8
  ```
9
- ![イメジ説明](571a5ce2858ee1c2bce0731a0bb11963.png)
9
+ ![違う値をコドのテストに使用した場合にエラーが起きています。](571a5ce2858ee1c2bce0731a0bb11963.png)
10
10
 
11
11
  [コーディングインタビュー練習サイトの問題のリンク](http://leetcode.com/problems/merge-sorted-array/)
12
12
 

13

写真の追加

2020/06/22 00:58

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -6,6 +6,7 @@
6
6
  Line 924: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
7
7
  SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h:933:9
8
8
  ```
9
+ ![イメージ説明](571a5ce2858ee1c2bce0731a0bb11963.png)
9
10
 
10
11
  [コーディングインタビュー練習サイトの問題のリンク](http://leetcode.com/problems/merge-sorted-array/)
11
12
 

12

修正

2020/06/22 00:55

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -21,7 +21,7 @@
21
21
  nums2 = [2,5,6]
22
22
 
23
23
  n=3
24
- m=4
24
+ m=3
25
25
 
26
26
  ###期待される答え
27
27
  nums1 = [1,2,2,3,5,6]

11

コメントの変更

2020/06/22 00:53

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -97,8 +97,8 @@
97
97
  n2++;
98
98
 
99
99
  }else if(tmp[0]<=nums2[n2]){
100
+ //tmpの方がnums2より小さいときは、
100
101
  //vectorの先頭の値をnums1に上書きする
101
- //currentTmpをincrementする
102
102
 
103
103
  //n1がmより小さいときは、上書きされるn1をtmpに退避させる
104
104
  //nums1 = [1,2,3,0,0,0] mとは、nums1[2]まで、

10

コメントの修正

2020/06/22 00:30

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -109,7 +109,7 @@
109
109
  }else{
110
110
  //0を上書きする場合は、0をtmpに退避させる必要はない
111
111
  }
112
- nums1[n1]=tmp[0]; //nums1の適切で、順序順のindexに戻した
112
+ nums1[n1]=tmp[0]; //nums1から一度tmpに退避したがh再び、nums1の順序順のindexに戻した
113
113
  //tmpのheadを削除する。
114
114
  tmp.erase(tmp.begin());
115
115
  n1++;

9

コメントの変更

2020/06/22 00:15

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -70,7 +70,7 @@
70
70
  }else if(nums1[n1]<=nums2[n2]){
71
71
  //nums1 = [1,2,3,0,0,0]
72
72
  //nums2 = [2,5,6]
73
- //nums1の3とnums2の5では、nums1の方が大きいので、
73
+ //nums1の3とnums2の5では、nums1の方が小さいので、
74
74
  //list nums1は変更せず、n1++をする
75
75
  n1++;
76
76
  }

8

コメントの修正

2020/06/22 00:12

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -53,7 +53,7 @@
53
53
  //1の方が大きいから2をリストnums1に挿入
54
54
  //nums1 = [1,2,3,0,0,0]
55
55
  //nums2 = [2,5,6]
56
- //nums1の3とnums2の2を比べて、まずは、nums1[2]をtmpにkeepして、nums[0]をnums1[2]に代入
56
+ //nums1の3とnums2の2を比べて、まずは、nums1[2]をtmpにkeepして、nums2[0]をnums1[2]に代入
57
57
 
58
58
  if(n1<m){
59
59
  //tmpに保存

7

コードを少し変更

2020/06/22 00:11

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -53,7 +53,7 @@
53
53
  //1の方が大きいから2をリストnums1に挿入
54
54
  //nums1 = [1,2,3,0,0,0]
55
55
  //nums2 = [2,5,6]
56
- //nums1の3とnums2の2を比べて、まずは、nums[2]をtmpにkeepして、nums[0]をnums1[2]に代入
56
+ //nums1の3とnums2の2を比べて、まずは、nums1[2]をtmpにkeepして、nums[0]をnums1[2]に代入
57
57
 
58
58
  if(n1<m){
59
59
  //tmpに保存

6

コードのコメントを見やすく修正

2020/06/22 00:09

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  int n1=0;
36
36
  int n2=0;
37
-
37
+
38
38
  vector<int>tmp;
39
39
 
40
40
  while(n1<nums1.size()){
@@ -42,9 +42,7 @@
42
42
  if(tmp.size()==0){
43
43
 
44
44
  if(n1>=m){
45
- //nums1が、初期値を指定された値を超えたとき
45
+ //nums1が、初期値を指定された値を超えたとき [1,2,3,0,0,0] の3を超えて0になった時、nums2をただnums1に入れていく
46
- //nums2をただnums1に入れていく
47
- //小さいnums2の値をnums1に上書き
48
46
  nums1[n1]=nums2[n2];
49
47
 
50
48
  //n1とn2を次に進める
@@ -52,7 +50,10 @@
52
50
  n2++;
53
51
 
54
52
  }else if(nums1[n1]>nums2[n2]){
55
- //1の方が大きいから2を使う
53
+ //1の方が大きいから2をリストnums1に挿入
54
+ //nums1 = [1,2,3,0,0,0]
55
+ //nums2 = [2,5,6]
56
+ //nums1の3とnums2の2を比べて、まずは、nums[2]をtmpにkeepして、nums[0]をnums1[2]に代入
56
57
 
57
58
  if(n1<m){
58
59
  //tmpに保存
@@ -67,29 +68,28 @@
67
68
  n2++;
68
69
 
69
70
  }else if(nums1[n1]<=nums2[n2]){
70
- //2の方が大きいから、n1をn2で上書きしない
71
- //同じ場合も1を使うからn2でn1を上書きしない
71
+ //nums1 = [1,2,3,0,0,0]
72
+ //nums2 = [2,5,6]
73
+ //nums1の3とnums2の5では、nums1の方が大きいので、
74
+ //list nums1は変更せず、n1++をする
72
75
  n1++;
73
76
  }
74
77
  }else{
75
78
  //tmp.size()!=0
76
- //つまり、vectorに保管してる数値はない
79
+ //つまり、vectorに保管してる
77
80
 
78
81
  if(n2==n-1){
79
-
80
- //nums1とnums2を足した数に行かないうちは、ループは続く
81
- //もしnums2が最後まで行のなら、nums1の値は、その分tmpに入っている
82
+ //もしnums2にもう要素ていないのなら、tmpに入っている値をnums1に挿入
82
83
  nums1[n1]=tmp[0];
83
84
 
84
85
  //tmpのheadを削除する。
85
- //tmp.pop_back();
86
86
  tmp.erase(tmp.begin());
87
87
  n1++;
88
88
 
89
89
  //tmpは、上書きされる前に退避させたn1の値だから tmpとn2を比較する
90
90
  }else if(tmp[0]>nums2[n2]){
91
- //n2の方が小さいということは、n2n1に上書きする
91
+ //n2の方が小さいということは、nums2nums1に上書きする
92
- //そのため、currentTmp次の値が消えてしまうので、pushしとく
92
+ //そのため、nums1の値が消えてしまうので、tmpに退避させとく
93
93
  tmp.push_back(nums1[n1]);
94
94
  //上書き
95
95
  nums1[n1]=nums2[n2];
@@ -97,19 +97,20 @@
97
97
  n2++;
98
98
 
99
99
  }else if(tmp[0]<=nums2[n2]){
100
-
101
100
  //vectorの先頭の値をnums1に上書きする
102
101
  //currentTmpをincrementする
103
102
 
104
103
  //n1がmより小さいときは、上書きされるn1をtmpに退避させる
104
+ //nums1 = [1,2,3,0,0,0] mとは、nums1[2]まで、
105
- if(n1<m){ //n1==要素数 m==size
105
+ //nums2 = [2,5,6]
106
+
107
+ if(n1<m){
106
108
  tmp.push_back(nums1[n1]);
107
109
  }else{
108
- //mより大いときは、 値は0だからpushしない
110
+ //0を上書する場合は、0をtmpに退避させる必要はない
109
111
  }
110
- nums1[n1]=tmp[0];
112
+ nums1[n1]=tmp[0]; //nums1の適切で、順序順のindexに戻した
111
113
  //tmpのheadを削除する。
112
- //tmp.pop_back();
113
114
  tmp.erase(tmp.begin());
114
115
  n1++;
115
116
  }

5

わかりやすく書き換えた

2020/06/22 00:07

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -10,11 +10,11 @@
10
10
  [コーディングインタビュー練習サイトの問題のリンク](http://leetcode.com/problems/merge-sorted-array/)
11
11
 
12
12
  ###要件定義
13
- 2つのソートされた整数配列nums1とnums2が与えられた場合、nums2を1つのソートされた配列としてnums1にマージします。
13
+ - 2つのソートされた整数配列nums1とnums2が与えられた場合、nums2を1つのソートされた配列としてnums1にマージします。
14
14
 
15
- nums1およびnums2で初期化される要素の数は、それぞれmおよびnです。
15
+ - nums1およびnums2で初期化される要素の数は、それぞれmおよびnです。
16
16
 
17
- nums1には、nums2からの追加の要素を保持するのに十分なスペース(m + n以上のサイズ)があると想定できます。
17
+ - nums1には、nums2からの追加の要素を保持するのに十分なスペース(m + n以上のサイズ)があると想定できます。
18
18
 
19
19
  ###関数呼び出し時に使われる値
20
20
  nums1 = [1,2,3,0,0,0]

4

説明の追加

2020/06/21 22:58

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -16,11 +16,16 @@
16
16
 
17
17
  nums1には、nums2からの追加の要素を保持するのに十分なスペース(m + n以上のサイズ)があると想定できます。
18
18
 
19
- ###input される値
19
+ ###関数呼び出し時に使われる値
20
20
  nums1 = [1,2,3,0,0,0]
21
21
  nums2 = [2,5,6]
22
22
 
23
+ n=3
24
+ m=4
23
25
 
26
+ ###期待される答え
27
+ nums1 = [1,2,2,3,5,6]
28
+
24
29
  ###エラーを起こすコード
25
30
  ```C++
26
31
  class Solution {

3

見やすくした

2020/06/21 22:56

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -1,13 +1,12 @@
1
1
  ランタイムエラーを引き起こしている原因がわからないです。
2
2
  どの点を修正することで、ランタイムエラーを解決できるのかを教えていただきたいです
3
3
 
4
+ ###発生しているエラー
4
5
  ```C++
5
- 発生しているエラー
6
6
  Line 924: Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
7
7
  SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h:933:9
8
8
  ```
9
9
 
10
- C++
11
10
  [コーディングインタビュー練習サイトの問題のリンク](http://leetcode.com/problems/merge-sorted-array/)
12
11
 
13
12
  ###要件定義
@@ -22,8 +21,8 @@
22
21
  nums2 = [2,5,6]
23
22
 
24
23
 
24
+ ###エラーを起こすコード
25
25
  ```C++
26
- エラーを起こすコード
27
26
  class Solution {
28
27
  public:
29
28
  void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {

2

詳細の追加

2020/06/21 22:52

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -7,8 +7,8 @@
7
7
  SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h:933:9
8
8
  ```
9
9
 
10
- ```C++
10
+ C++
11
- [コーディングインタビュー練習サイトの問題のリンク](https://leetcode.com/problems/merge-sorted-array/)
11
+ [コーディングインタビュー練習サイトの問題のリンク](http://leetcode.com/problems/merge-sorted-array/)
12
12
 
13
13
  ###要件定義
14
14
  2つのソートされた整数配列nums1とnums2が与えられた場合、nums2を1つのソートされた配列としてnums1にマージします。
@@ -20,8 +20,8 @@
20
20
  ###input される値
21
21
  nums1 = [1,2,3,0,0,0]
22
22
  nums2 = [2,5,6]
23
- ```
24
23
 
24
+
25
25
  ```C++
26
26
  エラーを起こすコード
27
27
  class Solution {

1

情報の追加

2020/06/21 22:51

投稿

alizona
alizona

スコア126

title CHANGED
File without changes
body CHANGED
@@ -8,18 +8,18 @@
8
8
  ```
9
9
 
10
10
  ```C++
11
+ [コーディングインタビュー練習サイトの問題のリンク](https://leetcode.com/problems/merge-sorted-array/)
12
+
11
- 実現したいコード
13
+ ###要件定義
12
- //2つのソートされた整数配列nums1とnums2が与えられた場合、nums2を1つのソートされた配列としてnums1にマージします。
14
+ 2つのソートされた整数配列nums1とnums2が与えられた場合、nums2を1つのソートされた配列としてnums1にマージします。
13
15
 
14
- //nums1およびnums2で初期化される要素の数は、それぞれmおよびnです。
16
+ nums1およびnums2で初期化される要素の数は、それぞれmおよびnです。
15
17
 
16
- //nums1には、nums2からの追加の要素を保持するのに十分なスペース(m + n以上のサイズ)があると想定できます。
18
+ nums1には、nums2からの追加の要素を保持するのに十分なスペース(m + n以上のサイズ)があると想定できます。
17
19
 
18
- //nums1の値と、nums2の値を比較して、nums1のnextに接続して、nums1とnums2を行き来して、nums1にまとめる
19
-
20
- //input される値
20
+ ###input される値
21
- //nums1 = [1,2,3,0,0,0]
21
+ nums1 = [1,2,3,0,0,0]
22
- //nums2 = [2,5,6]
22
+ nums2 = [2,5,6]
23
23
  ```
24
24
 
25
25
  ```C++