C 编程:我如何在这个程序中使用 realloc



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

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("%in", digit);
        if (count >= 2)
        {
            printf("doublen");
            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);

相关内容

  • 没有找到相关文章

最新更新