• ベストアンサー

ポインタについて

#include <stdio.h> void douteki(void); double *d; FILE *f; int main(void){ int i; char dummy[10]; douteki(); /****省略****指定したファイルを開く**/ for(i=0;i<10;i++){ fscanf(f,"%s",dummy); *(d+i)=atof(dummy);     /**←ここ**/ } /**********あと,いろいろとdがさしている値を利用して処理する。******/ free(d); } void douteki(void){ if((d=(double*)malloc(10))==NULL){ fprintf(stdout,"領域が確保できませんでした。\n"); exit(1); } } 時間がなく急いで書いたので、細かい間違いはあるかもしれませんが、動的確保をして、そのアドレスが指している場所に、ファイルのデータをそれぞれ入れたいのですが、/****←ここ****/のところで、スレッド停止が出てしまいます。どこを間違えているのでしょうか?ちなみに時々、実行が出来るときもあります。 よろしくおねがいします。

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

>d=(double*)malloc(10) これでは double配列にはなりません。10バイトのエリアが確保されるだけです。 正しくは d = (double*)malloc (sizeof(double) * 10) です。

Nickee
質問者

お礼

なるほど。わかりました。 ありがとうございます。

その他の回答 (1)

  • wr250zb
  • ベストアンサー率41% (7/17)
回答No.2

malloc()で確保するサイズが不足しています。 malloc()は何バイト確保するかの指定なので、 double型×10個ので計算されるサイズが 必要ですね。

Nickee
質問者

お礼

ありがとうございます。 まだ、確かめていませんけど、そこの考え方が間違えていたので、たぶん、合っているでしょう。一応、締め切らせてもらいます。 同じ回答なので、ポイントについては、申し訳ありませんが、早いもの順ということでお願いします。

関連するQ&A