Я пытаюсь создать надежный LinkedList в c, и одна из проблем, с которыми я имею дело, - это инициализация.Вывод указателя на нулевой указатель?
struct node* list = malloc(sizeof(node))
очевидный способ для инициализации LLIST, но инициализирует head
элемента value
0, что это не совсем то, что я хочу. У недавно инициализированного LList не должно быть никаких узлов. Вместо этого, я хотел бы сделать что-то вроде этого:
struct node* list = NULL;
создать LLIST, а затем добавлять элементы с:
add(&list, 1);
add(&list, 2);
, которые в основном разыменовать &list
, тест, чтобы увидеть, если это NULL
, и если это так, то X в противном случае делает Y. Однако, очевидно, я чувствую срыв, и мне интересно, не потому ли, что я разыменовал указатель на нулевой указатель?
добавить()
8 void add(struct node** headRef, int value) {
9 struct node* node = *headRef;
10 struct node* new_node = malloc(sizeof(*new_node));
11
12 new_node->value = value;
13 new_node->next = NULL;
14
15 if (node == NULL) {
16 node = malloc(sizeof(node));
17 node = new_node;
18 } else {
19
20 while (node->next != NULL) {
21 node = node->next;
22 }
23
24 node->next = new_node;
25 }
26 }
Благодаря
Как мы можем определить, не отображается ли код, где происходит ошибка seg? Если вы разыщите '& list', вы получите' list'. Это нормально. То, что вы не можете сделать, - это разделить «список». – kaylum
Ну, вы, возможно, знаете, если разыменование указателя на нулевой указатель вызывает ошибку seg для одного. ** EDIT: Спасибо за редактирование Alan, это было все, о чем я просил ... можно ли разыменовать указатель на нулевой указатель. ** –
Я могу отправить код, обновление ожидается ... –