【发布时间】:2021-02-01 05:09:55
【问题描述】:
使用这个结构:
typedef struct MyStack {
size_t size; // current size of stack
size_t max; // max size of stack
Item* data[];
} MyStack;
我该如何做一个正确的 malloc 然后 realloc ?例如,如果我这样做:
MyStack* stack = malloc(sizeof(MyStack));
stack->data = malloc(size * sizeof(Item*));
// ... and later on...
stack->data = realloc(stack->data, new_stack_size);
我收到以下错误:
错误:灵活数组成员的使用无效
错误:灵活数组成员的使用无效(以上每一项都有一个错误)
那么,这样做的正确方法是什么?使用Item** data 而不是Item data[] 会更简单吗?
【问题讨论】:
-
查看this answer 类似的问题。另请阅读 the Dragon book 和 GC handbook
-
为什么不只是
Item* data;?它是指向data项目的指针。另外,为什么sizeof(Item*)?您没有为指针分配空间,是吗? -
Item是一个结构,所以我想要一个指向Item的指针数组。抱歉,这个名字太笼统了,我可以改一下让它更清楚。 -
stackoverflow.com/questions/12680946/… 是相关的,可能会有所帮助。
-
@BasileStarynkevitch 很抱歉,这些书有什么关系?