Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

malloc関数の使い方について(初心者)

膨大なデータ数を扱うためにmalloc関数を用いて配列にデータを格納し、それを表示するプログラムを考えました。コンパイルはできるのですが、実行するとエラーが起こります。freeの開放の仕方が間違っているのでしょうか?よろしくお願いします。 /*ソース*/ #include <stdio.h> #include <stdlib.h> #define N 130000 int main(void) { double *p; int i; p = malloc(N); if(!p){ printf("割り当てエラー"); exit(1); } for(i=0;i<N;i++){ p[i]=i; printf("%f\n",p[i]); } free(p); }

質問者が選んだベストアンサー

  • ベストアンサー
  • uzk
  • ベストアンサー率40% (6/15)
回答No.1

mallocに渡すのは、要素数ではなくサイズです。 なので、 p = malloc(N*sizeof(double)); としてみて下さい。 また、pの型がfloatやlong doubleやintなどに変わる可能性も考慮すると、 p = malloc(N*sizeof(*p)); とした方が良いと思います。 このsizeofは型情報をみているだけなので、 例えpがNULLでも問題は起きません。

yuji221
質問者

お礼

素早いご解答懇切丁寧にありがとうございました。とても参考になりました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • flowergoo
  • ベストアンサー率38% (13/34)
回答No.2

取得するバイト数が足りないのでは malloc()の引数(N)は、確かバイ単位の指定だったと思います。 従って引数で指定するバイト数もdoubleの個数ではなく、 確保する変数の数 × doubleのバイト数 だけ必要になり、これが足りないためにエラーが出ている可能性があります。

yuji221
質問者

お礼

その通りでした。親切で適切なご解答ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A