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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
テオリア

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

#1

投稿記事 by テオリア » 18年前

下記のようなプログラムで

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

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

int *a;

*a = rand()%2;

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

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

box

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

#2

投稿記事 by box » 18年前

> int *a;

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

> *a = rand()%2;

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

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

テオリア

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

#3

投稿記事 by テオリア » 18年前

boxさん、素早い解答、かつわかりやすい説明ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る