2011-11-14 15 views
0

以下は現在のコードです。私の教授は、ダブルポインタを使用してポインタの配列を作成するように指示しました。cダブルポインタ配列

struct dict { 
    struct word **tbl; 
    int (*hash_fcn)(struct word*); 
    void (*add_fcn)(struct word*); 
    void (*remove_fcn)(struct word*); 
    void (*toString_fcn)(struct word*); 
}; 

struct word { 
    char *s; 
    struct word *next; 
}; 

struct dict * hashtbl;主な機能

hashtbl=malloc(sizeof(struct dict)); 
    hashtbl->tbl=malloc(sizeof(struct word)*256); 
    int i; 
    for(i=0;i<256;i++) 
    { 
    hashtbl->tbl[i]=NULL; 
    } 

一部が、これは二重のポインタ配列のこの種を実装するための正しい方法は何ですか?

hashtbl->tbl[i] = ..... 

そのスペースにアクセスするための正しい方法を使用していますか?

+0

ポインタの配列を指し示したいのですか? – darksky

+0

struct word – Kamran224

+0

を指しているはずですので、 'struct word ** tbl'を初期化しますか? – darksky

答えて

3

hashtbl->tbl=malloc(sizeof(struct word)*256);

実際hashtbl->tblので

hashtbl->tbl=malloc(sizeof(struct word *)*256);

すべきはstruct word **tblを初期化するためにstruct word *

0

の配列である:

hashtbl->tbl = malloc(sizeof(struct word *)*256); 

if (hashtbl->tbl == NULL) { 
    printf("Error malloc"); 
    exit(1); 
} 

for (int i = 0; i < 256; i++) { 
    hashtbl->tbl[i] = malloc(sizeof(struct word)); 
    if (hashtbl->tbl[i] == NULL) { 
     printf("Error malloc"); 
     exit(1); 
} 

割り当てを解除するには:

関連する問題