制作动态 C 结构数组时出错

Errors when making a dynamic C array of structs

我有一个名为 Collection 的结构:

typedef struct collection {
   char *type;
   char *arg;
} *Collection;

而且我想要这个结构的动态数组(或者更确切地说,是指向这个结构实例的指针)。这是我试过的:

Collection *rawCollections = malloc(0);
int colCounter = 0;
while (i < argc) {
    Collection col = malloc(sizeof(Collection));
    // code to fill in Collection
    rawCollections = realloc(rawCollections, sizeof(rawCollections) + sizeof(Collection));
    rawCollections[colCounter] = col;
    colCounter++;
}

我的理由是,每次我需要添加另一个数组时,我们都会将 sizeof(Collection) 添加到数组中。我收到这些错误,我不确定为什么:

realloc(): invalid next size
Aborted (core dumped)

您必须通过将数组元素的大小(指向 struct collection 的指针)乘以新的元素数 (colCounter + 1) 来计算数组的新大小。

还要注意将指针隐藏在 typedef 后面是多么令人困惑:sizeof(Collection) 不是 结构的大小。

这是修改后的版本:

struct collection **rawCollections = NULL;  // no need for `malloc(0)`
int colCounter = 0;
while (i < argc) {
    struct collection *col = malloc(sizeof(*col));
    // code to fill in Collection
    rawCollections = realloc(rawCollections, sizeof(*rawCollections) * (colCounter + 1));
    rawCollections[colCounter] = col;
    colCounter++;
}