2017-01-15 13 views
0

mainの中にCで10個の要素の配列を作成し、いくつかの要素のみの値を宣言しました。配列を印刷するとき、私は触れられていない要素の1つがゼロに初期化されていないことに気づいた。代わりに、毎回異なる大きな値に初期化されました(つまり、1491389216)。私はすべてのコードをコメントアウトし、最初に宣言したとおりに配列を残しました。int配列要素がCでゼロに初期化されていない

コードを実行すると、配列の最初の8要素がゼロに初期化され、配列の9番目の要素が毎回変更される大きな値(1491389216など)に初期化され、最後の要素は一貫して同じ非ゼロ数に初期化されます。

これはなぜ起こっているのですか?

+4

コードを投稿してください。 [mcve] – BLUEPIXY

+0

あなたはCで編集したことを意味していますか? –

答えて

3

ローカル(自動)配列は、明示的に初期化しない限り初期化されません。それ以外の場合は、既にランダムなデータがすでにメモリを占有しています。

あなたは、配列を宣言するときのすべての要素をゼロにしたい場合は、あなたがこれを行うことができます:

int arr[10] = {0}; 

または:

int arr[10] = {}; 

コンパイラによっては(GCCがない限り、これを可能に-pedanticと指定します)。

あるいは、単に代わりmemset()を使用する:

int arr[10]; 
memset(arr, 0, sizeof(arr)); 

同様に、メモリはmalloc()によって割り当て - またはrealloc()によって伸長 - 初期化されません。そのようなデータをゼロ初期化するにはcalloc()を使用してください:

int *arr = (int*) calloc(10, sizeof(int)); 
... 
free(arr); 
+1

calloc関数を使うと、 – minigeek

+1

* automatic *配列が初期化されていないようです。静的なものは。 Fwiw。 – rici

関連する問題