背景:Cでのポインターと動的メモリ割り当ての謎を解明しようとしています。ユーザーからいくつかの浮動小数点入力を取得し、動的に割り当てられてより多くの値に対応できるように拡張された配列に格納しようとしています。ユーザーが0を入力すると、ループが終了し、合計と平均が計算されて出力されます。BorlandC5.02を使用しています
問題:1。ループは4回しか機能せず、4番目の値が保存されません。
2. x +iをx[i]に置き換え、*(x + i-1)をx [i-1]に置き換えると、「浮動小数点エラー:スタック障害」「プログラムの異常終了」が発生します。
int main(void)
{
float *x;
float sum=0;
float avg=0;
int i=0;
x=(float*)malloc(sizeof(float));
do
{
scanf("%f",x+i); //take input
i++;
x=(float*)realloc(x, i*sizeof(float)); //reallocate memory to store more values
if(x==NULL){printf("WARNING");}
printf("\n%f %p %d\n",*(x+i-1),x,i);
}while(*(x+i-1)!=0);
for(int j=0;j<i;j++)
{sum=sum+*(x+j);} // Sum all values
avg=sum/(i-1); //Find result, i is 1 bigger than number of values, ith value is 0
printf("\n\n%d sum: %f avg: %f ",i,sum,avg);
getch();
return 0;
}