Как исправить ошибку ошибки сегментации при доступе к следующему в связанном списке? - PullRequest
0 голосов
/ 10 мая 2019

Я студент, изучающий структуры данных, пытающийся реализовать функцию 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 голосов
/ 10 мая 2019

Если вы пытаетесь вставить узел в начало списка, вам также необходимо обновить ht->table[idx].

В настоящее время вы обновляете локальный указатель plink в вашем else случае.

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

должно быть

  else{
               .....
               ht->table[idx] = hlnk;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...