解除引用“void *”指针 - 列表中的列表

时间:2016-11-26 22:29:44

标签: c linked-list void-pointers

我想在列表中编写一个包含列表的程序。 所以有list.h文件:

typedef struct node {
    void *ptr;
    struct node *next;
    struct node *prev;
} NODE;

typedef struct list {
    struct node *head;
    struct node *tail;
    int size;
    char name[MAX_SIZE_NAME];
} LIST;

首先我有列表,例如list_。 现在我分配5个元素。

在每个节点中我想分配一个新列表。 我尝试使用这段代码:

if (list_->head->next == list_->tail) {
    list_ins_next(list_);
    ptr = list_->tail->prev;
    ptr->ptr = malloc(sizeof(LIST));
    ptr->ptr->head = malloc(sizeof(NODE));

抱歉,我没有太多的编程经验,但如果你能帮助我会很棒

错误是:解除引用'void *'指针

1 个答案:

答案 0 :(得分:2)

ptr->ptr->head = malloc(sizeof(NODE));

相当于:

(*(ptr->ptr)).head = malloc(sizeof(NODE));

表达式*(ptr->ptr)无效,因为您无法取消引用void*

您需要一个类型为LIST*的指针来取消引用它,然后使用该对象的head成员。

使用:

((LIST*)ptr->ptr)->head = malloc(sizeof(NODE));