前回もありがとうございました。
その前回に続き、再び実行結果が上手くいかない状況になりました。
今回は前回の『定積分の計算』スレで出来たプログラムにおいて、
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つ同時に記憶領域の動的確保は無理なのでしょうか?
ご教授お願いします。
※読み込むファイルを再度添付しておきますね。