* сильный текст * Я создал связанный список в C под названием lon с помощью следующих функций:
struct ilist_node {
struct ilist_node * rest;
int first;
};
typedef struct ilist_node *ilist;
ilist icons(int in, ilist il) {
ilist r = malloc(sizeof(struct ilist_node));
r->first = in;
r->rest = il;
}
затем я увеличил список значками , чтобы создать список чисел
после этого я попытался напечатать каждый элемент в списке и освободить память, используемую списком, на
while (lon!= NULL) {
ilist tmp = lon->rest;
printf(" %d\n",lon->first);
free(lon);
lon = tmp;
}
Я могу понять, почему эта функция выше работает. (Я гуглил, как освободить память, и этот, кажется, популярный ответ). Но из любопытства я попробовал другой:
ilist tmp = lon;
while (lon != NUll) {
printf(" %d\n",lon->first);
lon = lon->rest;
}
idelete(tmp);
и это тоже работает. Так что я немного растерялся. Если последний работает, то почему мне нужно пройти по списку и освободить каждый узел?