e405.c
初期化されていない配列(2)





コード例:
int aiNG[10] ;
printf("aiNG[5]=%d¥n", aiNG[5]) ;
/* 結果は不定 */
修正コード:
/* こうするだけで残りの部分は0で初期化されます */
int aiOK[10] = {1,2,3,4,5,} ;
printf("ai[5]=%d¥n", aiOK[5]) ;
/* 結果は必ず 0 */
解説
初期化されていない配列の要素値を参照しています。
e404は配列の添字が変数でしたが、e405は添字が定数です。
配列の初期化と言われると、
memsetやループで回すことを考える人が少なからずおりますが、
たったこれだけの処理で配列の初期化ができます。
必ず初期化を行いましょう。
参考 サンプルソース
/* 配列が初期化されている様子を */
/* 実際に確かめてください */
#include <stdio.h>
#define MAX 10
int main(void)
{
int i=0;
int aiNG[MAX] ; /* 初期化されていない */
int aiOK[MAX] = {0} ; /* 全て0で初期化 */
int aiOK2[MAX] = {0,1,2,3,4,} ; /* 残りの部分は0で初期化されます */
double adNG[MAX]; /* double時の場合 */
double adOK[MAX] = {0,} ; /* doubleでも0初期化 */
/* int */
for (i=0; i< MAX ; i++)
printf("aiNG[%d]=%d ", i, aiNG[i]) ;
puts("") ;
for (i=0; i< MAX ; i++)
printf("aiOK[%d]=%d ", i, aiOK[i]) ;
puts("") ;
for (i=0; i< MAX ; i++)
printf("aiOK2[%d]=%d ", i, aiOK2[i]) ;
puts("¥n") ;
/* double */
for (i=0; i< MAX ; i++)
printf("adNG[%d]=%f ", i, adNG[i]) ;
puts("") ;
for (i=0; i< MAX ; i++)
printf("adOK[%d]=%f ", i, adOK[i]) ;
return 0;
}