如何在访问链表中的下一个时修复分段错误?

时间:2019-05-10 03:55:46

标签: c linked-list hashmap

我是一名学习数据结构的学生,试图实现一个哈希表函数,该函数将使用链表的节点添加元素。当我调用下一个值时,最终我的else语句中出现了段错误,我不知道为什么。感谢您的帮助,谢谢大家。

  void insertMap (struct hashMap * ht, KeyType k, ValueType v)
  {  /*write this*/
int idx = stringHash1(k);
struct hashLink * hlnk;
struct hashLink * plink;
assert(ht);

if(ht->table[idx] == NULL){
    hlnk = (struct hashLink *) malloc(sizeof(struct hashLink));
    hlnk->value = v;
    hlnk->key = k;
    hlnk->next = NULL;
    ht->table[idx] = hlnk;
    ht->count++;
}

else{
            plink = ht->table[idx];
            hlnk = (struct hashLink *) malloc(sizeof(struct hashLink));
            hlnk->value = v;
            hlnk->key = k;
            hlnk->next = plink->next;
            plink->next = hlnk;
            ht->count++;
    }
}

1 个答案:

答案 0 :(得分:0)

如果您尝试将节点插入列表的最前面,则还需要更新ht->table[idx]

当前,您正在以plink的情况更新本地指针else

else{
           .....
            plink->next = hlnk; //this line only updates the local pointer
            ht->count++;
    }

应该是

  else{
               .....
               ht->table[idx] = hlnk;
  }