C で単純なリストを実装するのに問題があります。問題は、ポインターを介したアイテムの接続です。
次のコードはハッシュテーブルのスニペットであり、衝突を避けるために同じインデックスを持つアイテムをリストに格納することになっています。
typedef struct dictEntry {
void *key;
void *value;
struct dictEntry *next;
} dictEntry;
typedef struct dict {
dictEntry **table;
unsigned long size;
unsigned long used;
} dict;
void dictAdd(dict *d, void *key, void *value) {
int index = hash(key) & d->size;
dictEntry *entry;
entry = malloc(sizeof(entry));
entry->key = key;
entry->value = value;
entry->next = 0;
if (d->table[index]) {
/* this is does not work */
dictEntry *next;
next = d->table[index];
while (next) {
next = next->next;
}
next = entry;
} else {
d->table[index] = entry;
d->used++;
}
}
私の考えでは、リスト ( ) のすべての要素を反復処理し、最後の要素 ( ) へのnext->next
ポインターを割り当てます。
コードの一部を書き直して移動してから数日経っても、まだ解決策が見つからないようです。entry
next = entry;