背景:我试图澄清 C 中指针和动态内存分配的奥秘。我试图从用户那里获取几个浮点输入,将它们存储在一个动态分配的数组中,从而扩展以容纳更多值。一旦用户输入 0,循环终止,计算和打印总和和平均值。我正在使用 Borland C 5.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;
}