Проблема
Аргументы функции в C являются «передачей по значению». Проблема в том, что ваша fill_list
функция принимает указатель на node_t
с именем head
, но любые изменения, которые вы вносите в этот указатель, будут не влиять на значение head
вне функция. head
внутри функции - это совсем не то, что head
в вашем main()
.
Быстрое исправление
Если вы действительно хотите изменить значение из head
(тот, что находится вне функции), то вы должны передать функции указатель на бит памяти, в котором находится head
. Для вашего примера это означает указатель на указатель на node_t
.
Так что ваш fill_list
будет выглядеть так:
void fill_list(node_t **head) {
int i=1;
node_t *current;
for(;i<21;i++) {
current=create_node(i, *head);
*head=current;
}
}
Обратите внимание, что теперь вы должны разыменовать указатель перед передавая его create_node
.
Разыменовывая в назначении *head = current
, вы устанавливаете содержимое памяти, на которое указывает head
. Это та же самая память, в которой хранится переменная head
, объявленная в вашем main()
. Это то, что вы хотите.
Теперь вы можете позвонить fill_list
следующим образом:
fill_list(&head)
Better Fix
1048 * верните указатель на голову, например:
node_t* fill_list() {
int i=1;
node_t *head = NULL;
node_t *current;
for(;i<21;i++) {
current=create_node(i, head);
head=current;
}
return head;
}
, а затем main()
:
int main() {
node_t *head = fill_list();
print_list(head);
return 0;
}