Указатель next
последнего узла не установлен на null
. Таким образом, условие tmp->next != NULL
во втором for
-цикле никогда не будет выполнено. Действительно, вы можете видеть, что некоторое число мусора (0
) печатается после последнего номера (9
), до того, как возникнет ошибка сегмента.
Когда вы делаете это:
tmp->next = malloc(sizeof(node));
Вы также должны добавить что-то вроде этого:
tmp->next->next = NULL;
Таким образом, вы инициализируете каждый узел «безопасно», указав для next
значение NULL
. Все, кроме последнего узла, получат правильное значение на следующей итерации.
РЕДАКТИРОВАТЬ , как указано @Someprogrammerdude в комментарии, в конце вы получите один дополнительный узел, даже если вы сделаете то, что предложено выше.
Чтобы это исправить, вы можете изменить цикл создания следующим образом:
for(i = 0; i < 10; i++){
tmp->data = i;
if (i < 9) {
tmp->next = malloc(sizeof(node));
} else {
tmp->next = NULL;
}
tmp = tmp->next;
}