下記のようなプログラムで
ポインタ変数に乱数を代入するようにしたら、コンパイルエラーはないのですが、
実行すると、エラーとなってしまいます。
int *a;
*a = rand()%2;
これは、なぜなのでしょうか?
ご教授よろしくお願いいたします。
ポインタ変数への乱数の代入
Re:ポインタ変数への乱数の代入
> int *a;
この時点では、aというint型へのポインタ変数を定義しただけです。
aの値(つまり、どの領域を指しているか)はゴミ(不定)です。
> *a = rand()%2;
aの値が不定状態のまま、aが指している領域に書き込もうとすると、
プログラムが異常終了することがあります。しないこともあります。
解決策は2つあります。
1)a = &b; のようにして、既存のint型の領域(ここではb)を明示的に指す。
2)a = (int *) malloc(sizeof(int)); のようにして、
aが指す領域をプログラム実行時に動的確保する。
この時点では、aというint型へのポインタ変数を定義しただけです。
aの値(つまり、どの領域を指しているか)はゴミ(不定)です。
> *a = rand()%2;
aの値が不定状態のまま、aが指している領域に書き込もうとすると、
プログラムが異常終了することがあります。しないこともあります。
解決策は2つあります。
1)a = &b; のようにして、既存のint型の領域(ここではb)を明示的に指す。
2)a = (int *) malloc(sizeof(int)); のようにして、
aが指す領域をプログラム実行時に動的確保する。