我需要识别一个全局结构(数组),由4个整数组成。 问题是,该结构数组的大小事先是未知的。
我正试着做某事。像这样:typedef struct
{
int value;
int MAXleft;
int MAXright;
int MAX;
} strnum;
int main ()
{
int size;
scanf("%d", &size);
strnum numbers[size];
return 0;
}
我听说,有可能通过指针做到这一点,但我不知道该怎么办。
答案 0 :(得分:5)
您可以动态分配多个结构的空间,如下所示:
strnum *numbers = malloc( size * sizeof(strnum) );
然后你可以像任何常规数组一样使用它(主要是)。
使用calloc
代替malloc
可能更方便。它分配了许多块并用零填充它们。请注意,malloc
未清除已分配的内存。
strnum *numbers = calloc( size, sizeof(strnum) );
完成内存后,不要忘记调用free( numbers )
,这会将分配的内存返回给内存管理器。
如果你不再需要它free
并且分配越来越多,那么程序的内存占用将随着程序继续工作而无缘无故地增长。这称为内存泄漏,应该避免。它最终可能导致程序缺乏内存和不可预测的结果。
并且不要忘记在内存分配函数的原型中包含stdlib.h
标头。
答案 1 :(得分:0)
您要做的事情可以按照以下方式完成:
strnum* number;
int size = 0;
scanf("%d",&size);
number = malloc(size * sizeof(strnum));
此外,一旦使用完阵列,请不要忘记释放内存。
free(number);
答案 2 :(得分:0)
您可以从malloc()开始,然后在大小不断增加时执行realloc()。 我建议你一次分配一个10个结构的池,以减少对realloc()的调用次数。