こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ポインタについて

#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);
}

}

時間がなく急いで書いたので、細かい間違いはあるかもしれませんが、動的確保をして、そのアドレスが指している場所に、ファイルのデータをそれぞれ入れたいのですが、/****←ここ****/のところで、スレッド停止が出てしまいます。どこを間違えているのでしょうか?ちなみに時々、実行が出来るときもあります。

よろしくおねがいします。

投稿日時 - 2002-04-13 12:38:50

QNo.252044

困ってます

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

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

正しくは
d = (double*)malloc (sizeof(double) * 10)
です。

投稿日時 - 2002-04-13 14:04:53

お礼

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

投稿日時 - 2002-04-14 14:58:45

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

投稿日時 - 2002-04-13 14:06:01

お礼

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

投稿日時 - 2002-04-14 15:01:38

あなたにオススメの質問