【发布时间】:2019-06-14 02:38:38
【问题描述】:
我打电话给malloc,然后我想使用realloc 将大小减半,当我显示重定位malloc 的值时,少数数字显示为0,这是正常的还是我搞砸了?
double main()
{
double *test;
int size = 10;
int sizes;
int i = 0;
double value;
test = (double*)malloc(size*sizeof(double));
if(test == NULL)
{
printf("ERROR");
return 0;
}
else
{
printf("\nInsert values : \n");
for(i=0;i<=size;)
{
scanf("%lf",&*(test+i));
if(*(test+i)==0.0)
{
break;
}
if(i>=size)
{
size=size+2;
test = realloc(test, size*sizeof(double));
}
i++;
}
}
sizes=size/2;
test = realloc(test, sizes*sizeof(double));
printf("\nSaved values : \n");
for(i=0;i<size;i++)
{
printf("%lf\n",*(test+i));
}
}
我想学习一些编码,所以请告诉我是否以及我做错了什么。
【问题讨论】:
-
不需要在 C 中转换
malloc(),同样的原因realloc()不需要转换。 -
这个
i<=size看起来很可疑。 -
我建议您停止对“数组”使用指针算术语法,而是使用例如
test[i](而不是*(test + i))。它将使代码更易于阅读(并且更少编写)。 -
您最终将
test重新分配到sizes=size/2;,但随后循环到i=0;i<size;您是否有意这样做? -
double main()胡?!main()应该返回int。