背景:我试图澄清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)