• 締切済み

C言語に関する質問

以下のプログラムは問題なく動く場合もあればエラーが出る可能性もある。その理由は何ですか? 安定動作をさせるためにはどうしたらよいですか? #include<stdio.h> #include<stdlib.h> void main(void){ double *a; a=malloc(1); *a=1.0; printf("%f,%x\n",*a,a); free(a); }

みんなの回答

回答No.3

こんにちは。 私も勉強中なので不正確な情報になるかもしれませんが。 malloc( )の( )の中に入るのは動的配列を作るにあたって確保するスペースの大きさです。 ですから、 "a=malloc(1);" の行は次のように書くのが適切だと思います。 a=malloc(sizeof(double) * 1); ()の中は、「ダブルの数値1つが入るだけのスペース」という意味になっています。 問題なく動く場合がある理由は、すみませんが不勉強で分かりません。

  • ss-ak
  • ベストアンサー率58% (23/39)
回答No.2

追記:正常に動く場合と動かない場合があるのは、確保されたメモリのバイト数が足りておらず、メモリの内容が破壊されているからです。 正常に動いた場合は、たまたま運よく動いた、ということです。

  • ss-ak
  • ベストアンサー率58% (23/39)
回答No.1

a=malloc(1); ↓ a=malloc(sizeof(double)); double型のデータは、1バイトには収まりません。 何バイト使用するかは処理系依存ということになっており、使用バイト数は、sizeof演算子で取得できます。