在C中定义全局结构指针?

时间:2012-10-18 10:27:20

标签: c arrays string pointers global

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

我正试着做某事。像这样:

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

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

    strnum numbers[size];

    return 0;
}

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

3 个答案:

答案 0 :(得分:5)

您可以动态分配多个结构的空间,如下所示:

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

然后你可以像任何常规数组一样使用它(主要是)。

使用calloc代替malloc可能更方便。它分配了许多块并用零填充它们。请注意,malloc未清除已分配的内存。

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

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

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

并且不要忘记在内存分配函数的原型中包含stdlib.h标头。

答案 1 :(得分:0)

它被称为Dynamic Memory Allocation

您要做的事情可以按照以下方式完成:

   strnum* number;
   int size = 0;

   scanf("%d",&size);

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

此外,一旦使用完阵列,请不要忘记释放内存。

   free(number);

答案 2 :(得分:0)

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