4

我需要识别一个由 4 个整数组成的全局结构(数组)。问题是,该结构数组的大小事先不知道。

我正在努力做某事。像这样:

typedef struct
{
    int value;
    int MAXleft;
    int MAXright;
    int MAX;
} strnum;

int main ()
{
    int size;
    scanf("%d", &size);

    strnum numbers[size];

    return 0;
}

我听说,可以通过指针来做到这一点,但我不知道该怎么做。

4

3 回答 3

5

您可以像这样动态地为多个结构分配空间:

strnum *numbers = malloc( size * sizeof(strnum) );

然后你可以像使用任何常规数组一样使用它(大多数情况下)。

使用它可能更方便,calloc而不是malloc. 它分配多个块并用零填充它们。请注意,这malloc不会清除分配的内存。

strnum *numbers = calloc( size, sizeof(strnum) );

当您完成内存时,不要忘记调用free( numbers ),这会将分配的内存返回给内存管理器。

如果您free在不再需要它时不这样做,并且分配得越来越多,那么随着程序继续工作,程序的内存占用量将无缘无故地增长。这称为内存泄漏,应该避免。它最终可能导致程序内存不足和不可预测的结果。

并且不要忘记包含一个stdlib.h带有内存分配函数原型的标题。

于 2012-10-18T10:31:52.317 回答
0

它被称为动态内存分配

您尝试做的事情可以按如下方式完成:

   strnum* number;
   int size = 0;

   scanf("%d",&size);

   number = malloc(size * sizeof(strnum));

另外,不要忘记在使用完数组后释放内存。

   free(number);
于 2012-10-18T10:31:46.480 回答
0

您可以从 malloc() 开始,然后在大小不断增加时执行 realloc()。我建议您一次分配一个包含 10 个结构的池,以便减少对 realloc() 的调用次数。

于 2012-10-18T10:49:24.817 回答