Поскольку переменная 'head' является указателем, вы можете просто передать значение 'head' этим указателем, а не самим указателем, и в этом случае вы попытаетесь переопределить локальный указатель внутри функции.
Хорошо посмотрите на этот пример, чтобы присвоить / изменить значение указателю:
#include <stdio.h>
class A {
public:
int x;
};
// pass pointer by copy
void initialize(A* obj) {
obj = new A(); // obj not null here
obj->x = 2;
printf("x: %d\n", obj->x);
}
int main() {
A *a = nullptr;
initialize(a);
// a is still null here (pointer passed by copy)
printf("x: %d\n", a->x); // seg fault here, read on null
return 0;
}
Следующий код, как вы видите, неверен. Чтобы исправить этот пример, вы должны изменить прототип функции и передать указатель за указателем, чтобы он выглядел так:
#include <stdio.h>
class A {
public:
int x;
};
// pass pointer by pointer
void initialize(A** obj) {
*obj = new A(); // obj not null here
(*obj)->x = 2;
printf("x: %d\n", (*obj)->x);
}
int main() {
A *a = nullptr;
initialize(&a); // get the pointer address
// a is valid object here
printf("x: %d\n", a->x); // no error, x == 2
return 0;
}
Так что в вашем случае это должно быть:
insertNode(&table[key], word);
и
void insertNode(node **head, const char *key)
{
// Create node
node *pNode = getNode(key);
// Insert node into linked list
if (*head != NULL)
{
// Make new node point to first item in linked list (a.k.a head)
pNode->next = *head;
}
// Now point head to new node
*head = pNode;
}