質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

575閲覧

At Coder なぜ配列を初期化するとACとなるのか?

bbdd

総合スコア43

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/06/10 15:26

編集2020/06/10 15:27

前提

対象の問題

問題

疑問

配列の初期化をするかしないかでACするかどうかが変わっているのですが、なぜそうなるのかわかっていないです。
下記に全体のコードをしめしていますが、

c++

1 int as[200001] = {0}, bs[200001] = {0};

のように配列を初期化しているとacとなります。
なぜ初期化しない

c++

1 int as[200001], bs[200001];

のようなコードではダメなのでしょうか?
1ケースだけwaとなっているのですがどのようなケースで間違いとなるのか想像がつかなかったのでご教授いただけると幸いです。

対象のコード

acとなるコード

c++

1 2#include <bits/stdc++.h> 3 4#define rep(i, n) for (int i = 0; i < (n); ++i) 5#define all(obj) (obj).begin(), (obj).end() 6#define bit(n) (1LL << (n)) 7 8typedef long long ll; 9 10using namespace std; 11 12int main() { 13 cin.tie(0); 14 ios::sync_with_stdio(false); 15 16 int n,m; 17 cin>>n>>m; 18 19 int as[200001] = {0}, bs[200001] = {0}; 20 21 rep(i,m) { 22 int a,b; 23 cin>>a>>b; 24 25 if(a==1) as[b-1] = 1; 26 if(b==n) bs[a-1] = 1; 27 } 28 29 rep(i,m) { 30 int a = as[i]; 31 int b = bs[i]; 32 33 if(a==1 and b==1) { 34 cout<<"POSSIBLE"; 35 return 0; 36 } 37 } 38 39 cout<<"IMPOSSIBLE"; 40 41 return 0; 42} 43

waとなるコード

c++

1 2#include <bits/stdc++.h> 3 4#define rep(i, n) for (int i = 0; i < (n); ++i) 5#define all(obj) (obj).begin(), (obj).end() 6#define bit(n) (1LL << (n)) 7 8typedef long long ll; 9 10using namespace std; 11 12int main() { 13 cin.tie(0); 14 ios::sync_with_stdio(false); 15 16 int n,m; 17 cin>>n>>m; 18 19 int as[200001], bs[200001]; 20 21 rep(i,m) { 22 int a,b; 23 cin>>a>>b; 24 25 if(a==1){ 26 as[b-1] = 1; 27 } 28 29 if(b==n) { 30 bs[a-1] = 1; 31 } 32 } 33 34 35 rep(i,m) { 36 int a = as[i]; 37 int b = bs[i]; 38 39 if(a==1 and b==1) { 40 cout<<"POSSIBLE"; 41 return 0; 42 } 43 } 44 45 cout<<"IMPOSSIBLE"; 46 47 return 0; 48}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CやC++ではスタック上に確保される変数は、明示的に初期化しない限り、その部分のメモリに元からあったデータがそのまま残ります。そのため、変数が初期化されていることを期待するプログラムは正常動作しません。

投稿2020/06/10 15:37

kuuote

総合スコア705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuuote

2020/06/10 15:44

Cの仕様書には「自動記憶域期間をもつオブジェクトを明示的に初期化しない場合,その値は不定とする」という言葉で載っています。 https://kikakurui.com/x3/X3010-2003-01.html
bbdd

2020/06/11 01:10

ご返答ありがとうございます! 内容確認致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問