malloc, C, односвязный список
Есть интовый массив. Есть функция создания односвязного списка из этого массива и ней есть цикл for в котором используется malloc:
struct item *first = NULL, *last = NULL, *tmp;
for(int i = 0; i < len; i++){
tmp = malloc(sizeof(*tmp));
tmp->data = arr[i];
tmp->next = NULL;
if(last){
last->next = tmp;
last = last->next;
} else
first = last = tmp;
}
Функция возвращает указатель на этот список. Вопрос в следующем: Нужно ли как-то после этого чистить память с помощью free(или после завершения программы память сама освободится) и если да, то как это делать грамотно?
Можно, конечно, через цикл, но есть ли иной способ?