我必须编写一个程序来存储和打印内存中的整数。我必须使用realloc。基本上,程序分配2个整数的大小。当输入给出2个整数时,它应该重新分配1个空格的空间并打印出双倍。接下来,当输入给出3个整数时,它应该为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;
}
}
答案 0 :(得分:4)
您的init_size
为2,但d_size
为1.首先,将d_size
设为init_size
。其次,您需要在d_size = d_size * 2
之前执行realloc
,这样您才能真正增加尺寸。
旁注: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);