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

回答編集履歴

3

修正すべき点を追記

2020/03/09 16:40

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -20,4 +20,28 @@
20
20
  }
21
21
  }
22
22
  ...
23
+ ```
24
+ ---
25
+ **追記しました:**
26
+
27
+ OKのコードについても初期化の部分で配列の範囲外`cards[3][14]`にアクセスしているので、最悪、実行時エラーが起きてもおかしくないです。正しくは以下のように修正すべきでしょう。
28
+
29
+ ```C++
30
+ bool cards[4][14];
31
+ char a;
32
+ ...
33
+ // 初期化の部分
34
+ for(int i = 0; i < 4; i++){
35
+ // 「足りないカードを出力する部分」のやり方に沿ったループ(cards[i][0]は使わない)
36
+ // 元のコード for(int j = 0; j < 15; j++){
37
+ for(int j = 1; j <= 13; j++){
38
+ cards[i][j] = false;
39
+ }
40
+ }
41
+
42
+ // 足りないカードを出力する部分
43
+ for(int i = 0; i < 4; i++){
44
+ for(int j = 1; j<= 13; j++){
45
+
46
+ ...
23
47
  ```

2

再度修正

2020/03/09 16:40

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  > bool cards[3][13];
8
8
  ```
9
9
 
10
- 4種類の絵柄とそれぞれ13枚のカードが入り得る配列になっているか否か、です。(OKの方は1つの絵柄につき1枚余分な気がしますが、大勢に影響は無いです)
10
+ 4種類の絵柄とそれぞれ13枚のカードが入り得る配列になっているか否か、です。
11
11
 
12
12
  NGのコードの方では最初の`false`での初期化部分で`bool cards[3][14]`に書き込みをし、領域外を破壊することとなり、初期化以降でも`cards[3][...]`相当の部分にアクセスする可能性があるので、実行時にエラー(ランタイムエラー)になってもおかしくないです。
13
13
 

1

変?なコード部分の記述に合わせて修正

2020/03/09 14:24

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -7,9 +7,9 @@
7
7
  > bool cards[3][13];
8
8
  ```
9
9
 
10
- 4種類の絵柄とそれぞれ13枚のカードに正しく対応した配列になっているか否か、です。
10
+ 4種類の絵柄とそれぞれ13枚のカードが入り得る配列になっているか否か、です。(OKの方は1つの絵柄につき1枚余分な気がしますが、大勢に影響は無いです)
11
11
 
12
- NGのコードの方では最初の`false`での初期化部分などで`bool cards[3][14]`に書き込みをし、領域外を破壊することとなり、実行時にエラー(ランタイムエラー)になってもおかしくないです。
12
+ NGのコードの方では最初の`false`での初期化部分で`bool cards[3][14]`に書き込みをし、領域外を破壊することとなり、初期化以降でも`cards[3][...]`相当の部分にアクセスする可能性があるので、実行時にエラー(ランタイムエラー)になってもおかしくないです。
13
13
 
14
14
  ```C++
15
15
  ...