Нельзя объявлять переменную дважды в одной и той же области видимости.Вот почему вы получаете ошибку переопределения.
Указатель вашего списка также является переменной.Вы не должны повторно объявлять l
в своей основной функции.
Ваш компилятор уже знает, что это list *
, поэтому вы должны удалить list *
в строке 19.
такжея думаю, вы не понимаете, что делает free
.он распределяет память, выделенную вами с помощью malloc
, и, таким образом, делает память по адресу указателя непригодной для вашей программы.Вы должны повторно использовать malloc
(или вы можете напрямую использовать realloc
без необходимости использовать free
перед этим).