Я также вижу дополнительную проблему. В операторе while, равном lcreate()
, истинное предложение в операторе if malloc занимает некоторую память и присваивает его list
, однако elem
не обновляется.
while ((c = getc(file)) != EOF)
{
if(list == NULL) {
list = (element*)malloc(sizeof(element));
if(list == NULL) {
return 0;
}
list->val = c;
}
else {
В следующий раз через цикл while list
не будет ненулевым, но elem
по-прежнему будет нулевым, поэтому присваивание elem-> next пытается отложить нулевой указатель и, таким образом, ошибка сегментации (что, кстати, означает что вы пытались получить доступ к памяти, которая не была назначена вашему процессу): -
else {
elem->next=(element*)malloc(sizeof(element));
Как уже отмечали другие, вы также не вернете list
назад к основному, поэтому он будет равен NULL, когда вы нажмете цикл printf ().
Наконец, отладчик - ваш друг, когда вы смотрите на эти проблемы. Вы увидите, какая именно строка вызывает ошибку сегмента и каково было состояние переменных.