#arrays #c #pointers #struct #linked-list
Вопрос:
Я сталкиваюсь с проблемой, когда мой связанный список не добавляет новые значения, которые я ему даю. это приводит к ошибке сегментации, но я не знаю, как это исправить
Текущий Код
typedef struct node { int value;/*data stored in the node */ struct node *next; /*pointer to the next node*/ } NODE; void add(NODE **list, int n){//add_to_list in slides NODE *new_node; new_node = malloc(sizeof(NODE)); if (new_node == NULL) { fprintf(stderr,"Error:malloc failed in add_to_front n"); exit(EXIT_FAILURE); } new_node-gt;value = n; new_node-gt;next = *list; //return new_node; } void print_list(NODE *list){ printf("n=========n"); for (;list;list=list-gt;next){ printf("%dt",list-gt;value); } printf("n=========n"); } int main() { NODE *first=NULL; print_list(first); add(amp;first,10); add(amp;first,30); add(amp;first,20); add(amp;first,40); add(amp;first,30); print_list(first); }
Обновить
Я добавил в main, но теперь вместо ошибки сегментации ничего не печатается…
add(amp;first, number)
Ошибка возникает в функции добавления, более конкретно в этой строке «new_node-gt;следующий = *список;»
Я пытался разыменовать и многое другое, но безрезультатно.
Комментарии:
1. У вас есть
NODE *first=NULL;
в качестве первой строки, если ваша программа. Какfirst
и пустой список. Когда вы ожидаете, что это изменится? Укажите строку в своем коде, которая присваивает чтоfirst
-то или иным образом изменяет это.2. таким образом, функция добавления предназначена для внесения дополнений в список (сначала)
3. Какая строка в функции добавления?
4. его в главном добавлении(amp;во-первых,10) — это первое, что он добавляет
5. оооо… я только что понял это
Ответ №1:
Узел не вставляется, потому что вы не обновляете указатель заголовка: добавьте этот оператор в конце add()
функции:
*list = new_node;
Комментарии:
1. да, да, спасибо! я устал и не понял, что забыл отразить новые значения в массиве!
Ответ №2:
внесите изменения в разыменованный список
(*list) = new_node;
для того, чтобы добавить значения new_node в список.