所以,我有结构:
typedef struct {
int (*compare)(const void *a, const void *b);
struct node *head;
struct node *tail;
} *QueueADT;
我的理解是将其称为" * QueueADT"自动制作任何" QueueADT"项目成指针。所以:
QueueADT queue;
将是指向先前定义的结构的指针。我想知道你如何malloc这样的结构。通常它只是:
QueueADT queue = malloc(sizeof(QueueADT));
但是" QueueADT"不是指针?那么,您是否只为指向队列结构的指针分配了足够的内存?我使用我的代码在valgrind中得到了一些无效的写入,我认为这是由于我的队列初始化错误导致的。
答案 0 :(得分:4)
为结构和指针定义类型是正常的,如下所示:
typedef struct {
...
} QueueADT, *pQueueADT;
然后您可以按照建议使用sizeof(QueueADT)
:
pQueueADT queue = malloc(sizeof(QueueADT));
答案 1 :(得分:0)
QueueADT queue = malloc(sizeof(*queue));