gpt4 book ai didi

C编程: How do I use realloc in this program?

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:54 25 4
gpt4 key购买 nike

我必须编写一个程序来存储和打印内存中的整数。我必须使用 realloc。基本上,该程序为 2 个整数分配大小。当给定输入 2 个 int 时,它应该为另外 1 个 int 重新分配空间并打印出 double。接下来,当输入被赋予 3 个 int 时,它应该为 int 再分配 2 个空间并打印出 double.. 等等..

Test cases:

input file in.0:
------
4
------

expected output:
------
4
------

=================================================

input file in.1:
------
4 5
------

expected output:
------
4
5
double
------

==================================================

input file in.2:
------
4 5 3
------

expected output:
------
4
5
double
3
double
------

===================================================

input file in.3:
------
4 5 3 2 9
------

expected output:
------
4
5
double
3
double
2
9
double

我写了这个程序,但它没有正确分配内存。有人可以指导我的写作方向吗?

int main(void)
{
int c;

int digit;
int count = 0;
int d_size = 1;
int init_size = 2;
int *p = (int *) malloc(sizeof(int) * init_size);

while((c = scanf("%i", &digit)) != EOF)
{
if (c == 1)
{
*(p+count) = digit;
count++;
}
else
{
printf("not valid");
}

printf("%i\n", digit);

if (count >= 2)
{
printf("double\n");
p = (int *) realloc(p, sizeof(int) * d_size);
d_size = d_size * 2;
}

}

最佳答案

你的init_size是2,但是你的d_size是1。首先,让d_size等于init_size。其次,您需要在 realloc 之前执行 d_size = d_size * 2 以便实际增加大小。


旁注:如果内存不足,realloc 将失败。如果你写:

p = realloc(p, ...);

如果失败,你将失去之前分配的内存。您应该始终像这样使用 realloc:

enlarged = realloc(p, ...);
if (enlarged == NULL)
// handle error
else
p = enlarged;

旁注 2:您最终可能会更改指针的类型。最好不要重蹈覆辙。而不是

int *p;
p = (int *)malloc(sizeof(int) * count);

写:

int *p;
p = malloc(sizeof(*p) * count);

关于C编程: How do I use realloc in this program?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11233080/

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