доступ к узлам связанного списка с использованием двойных указателей


Я пытаюсь добавить узлы в связанный список, передавая указатель указателя, обращаясь к члену (*list) - > next дает ошибку сегментации. Может кто-то укажет на ошибку, заранее спасибо. Код -

void initializeList (node ** head, int data)
{
    *head = malloc (sizeof (node));
    (*head)-> member = data;
    (*head)-> next = NULL;
}

void addNode(node ** list, int data)
{
    node * newNode = NULL;
    newNode = malloc (sizeof (node));
    while (*list->next!= NULL) 
    {
        *list= (*list) -> next;
    }
    newNode -> member = data;
    newNode -> next = NULL;
    (*list) -> next = newNode;
}

void main ()
{
    node * head = NULL;
    initializeList (&head, 5);
    addNode(&head, 6);
}
2 2

2 ответа:

Не следует разыменовывать нулевой указатель,иначе, как и ожидалось, вы получите ошибку Seg.

Вот в чем проблема:

while (*list != NULL)
    {
    *list= (*list) -> next;
    }
newNode -> member = data;
newNode -> next = NULL;
(*list) -> next = newNode;

*list имеет значение NULL после цикла while.
И вы делаете (*list) -> next = newNode;

NewNode указывает на NULL после цикла Вы не можете установить его член и следующее значение использовать while (*list- > next!= NULL)

, что гарантирует, что вы не разыменуете NULL