2016-09-06 14 views
-6

退屈な質問かもしれません!ありがとう!C/C++初期化されていない配列の結果

ここでは、コードです:だから enter image description here

:Ubuntuの中

#include <iostream> 
#include <cstring> 
using namespace std; 

int main() 
{ 
     int a[5] = {0}; 
     int b[5]; 
     cout << a << endl; 
     cout << b << endl; 
     for (int i = 0; i < 5; i++) 
     { 
       cout << a[i] << " "; 
     } 
     cout << endl; 
     for (int i = 0; i < 5; i++) 
     { 
       cout << b[i] << " "; 
     } 
     cout << endl; 
     return 0; 
} 

:G ++ a.cpp DEV C++、MinGWのGCC 4.7.2とWindowsで

enter image description here

問題は配列bに焦点を当てています。

私は配列bを初期化していないことを知っています。

配列bにはガベージ値がいっぱいですが、「X 0 X 0 X」のような固定位置には常に「0」があるのはなぜですか?

内部ではどうなりますか? 単なる保護メカニズムですか?

+6

テキストの画像を投稿しないでください。 –

+1

@HIPPO LDあなたはすでに答えを知っています "配列bはごみ値でいっぱいです" – Cody

+0

申し訳ありません私は新人です。本当に退屈な質問かもしれません! –

答えて

3

これは未定義の動作です。これらのゼロがある場合、偶然にも真実であるという保証はありません。

ここでは、メモリ上のこれらの場所で何らかのランダムな理由で0が格納されていたため、ここで目的に再利用されました。スタックに配列を割り当てるので、これらのゼロはおそらく以前の関数呼び出しからのものであり、いくつかのパディングかもしれません。コンパイラは彼が喜んでそれを行うでしょう。

1

アレイの初期化されていない要素を読み取るときの動作は、未定義です。コンパイラは何もすることはできません。

(中括弧の初期化のためにaのすべての要素を読むことができますが、C++ではint a[5] = {};と書くことができます)。

関連する問題