为什么这段代码只循环4次?

qua*_*231 1 c malloc pointers

背景:我试图澄清C中指针和动态内存分配的谜团.我试图从用户那里获得几个浮点输入,将它们存储在一个动态分配的数组中,从而扩展以容纳更多的值.一旦用户输入0,循环终止并计算和打印总和和平均值.我正在使用Borland C 5.02

问题:1.循环仅工作4次,然后第4个值未存储!
2.如果我用x [i]和*(x + i-1)用x [i-1]替换x + i,我得到"浮点错误:堆栈错误""异常程序终止.

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;
}
Run Code Online (Sandbox Code Playgroud)

Tur*_*rix 10

由于从i0开始,你的realloc应该是: x=(float*)realloc(x, (i+1)*sizeof(float));