Ошибки сегментации возникают при попытке доступа к памяти, которая вам не принадлежит.
По словам авторов книги «Три простых пьесы» (это книга об операционных системах. Прекрасно читайте, кстати), ошибка сегментации - это просто причудливое слово:
ВЫ ЧТО-ТО НЕПРАВИЛЬНО
ПАМЯТЬ, ТЫ ГЛАВНЫЙ ПРОГРАММИСТ, И Я ЗЛО.
list=malloc(sizeof(ll_t));
list->val=1;
list->next=NULL; <----- This is where the problem starts.
Вы назначаете NULL
на list->next
. Это означает, что list->next now points to the memory location
0x0000`, который вам недоступен. Он используется для хранения некоторой базовой информации, которая требуется ОС для правильного запуска программы.
list->next->val=2; <----- This is where the problem ends (your program with it)
Вы пытаетесь получить доступ к чему-то на 0x0000
, что является большим нет-нет. Таким образом, операционная система обнаруживает это, останавливает вас и мешает уничтожить все, что ей нравится и о чем она заботится.