gpt4 book ai didi

c - 重新分配后显示的值很奇怪

转载 作者:行者123 更新时间:2023-11-30 16:22:49 24 4
gpt4 key购买 nike

我调用了malloc,然后当我显示重新定位的malloc的值时,我想使用realloc将大小减少一半,几个数字显示为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));
}

}

我想学习一些编码,所以请告诉我是否以及我做错了什么。

最佳答案

如果我很好地理解,您会在 EOF 处或读取值为 0 时停止读取值,并且不会记住 0,并且当读取完成后,您希望将分配 vector 减少到最小大小,在这种情况下:

#include <stdlib.h>
#include <stdio.h>

int main()
{
int size = 10;
double *test = malloc(size*sizeof(double));

if(test == NULL)
{
printf("ERROR");
return 0;
}
else
{
int i = 0;
double value;

printf("\nInsert values : \n");
while ((scanf("%lf",&value) == 1) && (value != 0))
{
if (i >= size) /* == is enough */
{
size += 2; /* I add 2 entries as you */
test = realloc(test, size*sizeof(double));
}
test[i++] = value;
}

/* remove possible extra entry at the end */
if (i != size)
test = realloc(test, i*sizeof(double));

size = i;

printf("\nSaved values : \n");
for(i=0 ;i<size; ++i)
{
printf("%lf\n",test[i]);
}

free(test);
}

return 0;
}

关于c - 重新分配后显示的值很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54277551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com