2016-11-26 4 views
0

リストを含むプログラムをリストに書きたい。たとえば、list_のため、私はリストを持ってまず逆参照 "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.hファイルがあります。 今私は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)); 

私はあまりプログラミング経験を持っていけない、しかし、あなたは

にエラーが私を助けるならば、それは素晴らしいことだ申し訳ありませんがある:

+0

'ノードは何である:: ptr'は表すことを意味しますか?常に 'struct list'を含んでいるか、任意のデータストアであることを指していますか? – Dai

+0

また、 'void *'を使っているのなら、おそらく何か間違っていると思います(型安全性をあきらめているからです)。 – Dai

答えて

2
「無効*」ポインタを参照解除

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

式012:

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

は、と等価ですvoid*を参照できないため、は無効です。

逆参照し、オブジェクトのheadメンバを使用するには、LIST*のポインタが必要です。

用途:

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

ありがとうございます:)それは今動作します – ben

関連する問題