我已经在 C 中实现了一个 hashmap,经过相当多的工作,我得到了一切正常工作......除了我的发布例程。
我的结构是这样设置的:
struct hashmap_element {
int value;
int key;
int used;
struct hashmap_element* next;
};
struct hashmap {
int table_size;
int current_size;
struct hashmap_element* table;
};
我当前的非工作发布例程如下所示:
void hm_release(struct hashmap* hm) {
hashmap_element* tmp;
hashmap_element* curr_itr;
for(int x=0; x<hm->table_size; x++) {
curr_itr = &hm->table[x];
while (curr_itr) {
tmp = curr_itr->next;
free(curr_itr);
curr_itr = tmp;
}
}
free(hm->table);
free(hm);
}
不幸的是,这个当前的 segvaults 在第一次运行后就出现了。我似乎无法让我的 'curr_itr' 锁定到数组中每个存储桶的第一个链上。我对在 C 中使用像这样的动态内存相当陌生,并且已经坚持了几天。
据我所知,一切都在正确初始化。例如,这里是我的 hashmap init 函数。
hashmap* hm_initialize() {
hashmap* hm = malloc(sizeof(hashmap));
hm->table = (hashmap_element*) calloc(INIT_SIZE, sizeof(hashmap_element));
hm->table_size = INIT_SIZE;
hm->current_size = 0;
// init the buckets
for (int x=0; x < hm->table_size; x++) {
hm->table[x].used=0;
hm->table[x].value=0;
hm->table[x].key=0;
hm->table[x].next=NULL;
}
return hm;
}
任何建议/意见将不胜感激。如果您需要更多我的代码,请告诉我。
谢谢你。