【问题标题】:How do I dynamically size an array of structure in C [closed]如何在 C 中动态调整结构数组的大小 [关闭]
【发布时间】:2013-08-18 14:23:37
【问题描述】:
typedef struct
{    
    char tenantName[32];
    unsigned int IDNum;
    float rentAmount;
    unsigned int flatNum;
    unsigned int Num;

}database;

如何动态调整结构数组的大小,而不是像数据库记录[1000]那样静态初始化它;

【问题讨论】:

  • 你用malloc()标记了这个。所以? (哦,我们在 C99 中也有 VLA。)

标签: c pointers struct malloc realloc


【解决方案1】:

您可以使用calloc(N,SIZE) 分配包含 N 个元素的数组,每个元素的大小为 SIZE。

在你的情况下,它看起来像这样:

数据库 *records = calloc(numdatabases,sizeof(*records));

至于调整数组的大小,您可以使用realloc(PTR,SIZE),它将 PTR 指向的先前分配的空间重新调整为 SIZE 的大小。

在您的情况下,您可以像这样缩小数组:

database *shrinkedrecords = realloc(records,NEWNUMBEROFARRAYS * sizeof(*records))

顺便说一句,在这两个代码中,而不是把 sizeof(*records) 你可以把 sizeof(database) 都有效。

【讨论】:

    【解决方案2】:

    在 C 中,您可以使用 malloc(获取内存)、realloc(获取更多内存)和 free(释放内存)。

    dataType *ptr = malloc(sizeof(dataType)); //one record memory allocated
    
    ptr = realloc(ptr, newSize);  //increases the size of the memory allocated
    
    free(ptr); //releases all the memory
    

    【讨论】:

      【解决方案3】:
      database *record = malloc(1000*sizeof(database));
      

      确保在使用后释放分配的内存。

      free(records);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多