ページ 11

ポインタ変数への乱数の代入

Posted: 2007年7月19日(木) 11:25
by テオリア
下記のようなプログラムで

ポインタ変数に乱数を代入するようにしたら、コンパイルエラーはないのですが、

実行すると、エラーとなってしまいます。

int *a;

*a = rand()%2;

これは、なぜなのでしょうか?

ご教授よろしくお願いいたします。

Re:ポインタ変数への乱数の代入

Posted: 2007年7月19日(木) 11:34
by box
> int *a;

この時点では、aというint型へのポインタ変数を定義しただけです。
aの値(つまり、どの領域を指しているか)はゴミ(不定)です。

> *a = rand()%2;

aの値が不定状態のまま、aが指している領域に書き込もうとすると、
プログラムが異常終了することがあります。しないこともあります。

解決策は2つあります。
1)a = &b; のようにして、既存のint型の領域(ここではb)を明示的に指す。
2)a = (int *) malloc(sizeof(int)); のようにして、
  aが指す領域をプログラム実行時に動的確保する。

Re:ポインタ変数への乱数の代入

Posted: 2007年7月19日(木) 11:43
by テオリア
boxさん、素早い解答、かつわかりやすい説明ありがとうございます。