2016-11-26 83 views
0

我想寫一個列表中的列表程序。 於是就有了list.h文件:取消引用「void *」指針 - 列表中的列表

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個元素。

並在每個節點我想分配一個新的列表。 我tryed與此代碼:

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)); 

對不起我沒有那麼多的編程經驗,但是這將是巨大的,如果你能幫我

的錯誤:提領「無效*」指針

+0

什麼是代表'節點:: ptr'?它是否總是指向包含'struct list'或是一個任意的數據存儲? – Dai

+0

另外,如果你使用'void *',你可能做錯了什麼(因爲你放棄了類型安全)。 – Dai

回答

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)); 
+0

謝謝:)現在它可以工作 – ben