前回もありがとうございました。
その前回に続き、再び実行結果が上手くいかない状況になりました。
今回は前回の『定積分の計算』スレで出来たプログラムにおいて、
read_file関数内で、配列用の記憶領域を動的に割り当てるというものです。
作ってみたソースです。
#include<stdio.h> #include<stdlib.h> #include<malloc.h> //ファイル名を入力させる関数 void file_input(char *fn) { printf("ファイル名を入力--> "); gets(fn); } //ファイルから入力データを読み込む関数 void read_file(FILE *fp, char *fn, double *x, double *y, int *n) { int i; if ((fp = fopen(fn, "r")) == NULL) { printf("ファイルをオープンできません.\n"); exit(1); } fscanf(fp, "%d", n); x = (double *)malloc(sizeof(double) * (*n)); y = (double *)malloc(sizeof(double) * (*n)); if (x == NULL || y == NULL) { perror("メモリの確保に失敗しました.\n"); exit(1); } for (i = 0; i < *n; i++) fscanf(fp, "%lf%lf", &x, &y); free(x); free(y); fclose(fp); } //定積分をする関数 double integrate(double *x, double *y, int n) { int i; double ss = 0.0; for (i = 0; i < n -1; i++) ss = ss + (y + y[i+1]) * (x[i+1] - x) / 2.0; return ss; } //結果を出力する関数 void output(double S) { printf("面積 ≒ %f\n", S); } //以下、main関数 int main(void) { FILE *fp; char fn[32]; int n; double *x, *y, S; file_input(fn); read_file(fp, fn, x, y, &n); S = integrate(x, y, n); output(S); return 0; }
結果は
面積 ≒ -NAN
という具合に表示されます。
何回も見直しているのですが原因が分かりません。
もしかして、xとy2つ同時に記憶領域の動的確保は無理なのでしょうか?
ご教授お願いします。
※読み込むファイルを再度添付しておきますね。