【发布时间】:2020-12-30 09:57:46
【问题描述】:
我有一个名为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)
【问题讨论】:
-
sizeof(rawCollections)does not change. -
您需要保留自己的计数器以重新分配大小(例如
colCounter)。 -
不要在 typedef 后面隐藏指针性质。它让每个人都感到困惑,包括你。
-
Collection col = malloc(sizeof(Collection));也是错误的。 -
Collection是struct collection *的类型定义。因此,您正在创建一个struct collection *类型的变量并将其指向分配为struct collection *大小的内存。也就是说,当您应该分配指向对象的大小时,您分配了指针的大小。您可以通过将malloc调用转换为malloc(sizeof(*col))来解决此问题
标签: c pointers malloc dynamic-memory-allocation realloc