Освобождение структуры с переменными указателя и не указателя - PullRequest
2 голосов
/ 05 сентября 2010

Я пытаюсь реализовать связанные списки с помощью c struct, я использую malloc для выделения нового узла, затем выделяю пространство для value, поэтому я думал, как освободить структуру, как только я закончу с ними Моя структура выглядит так:

typedef struct llist {
     char *value;
     int line;
     struct llist *next;
} List;

У меня есть функция, которая просматривает структуру и освобождает ее члены следующим образом:

free(s->value);
free(s);

У меня вопрос, это также освобождает int line?

Ответы [ 2 ]

3 голосов
/ 05 сентября 2010

Да.

int line является частью структуры и поэтому освобождается при освобождении структуры. То же самое относится и к char *value. Однако это не освобождает память, на которую указывает value, поэтому для этого нужно отдельно вызвать free.

1 голос
/ 05 сентября 2010

Да, это так. Когда вы выделяете память для s, она выделяет память для этих трех:

указатель на символ (значение)
целое число (строка)
указатель на список структур (следующий)

Когда вы освободили s, все это хранилище ушло (включая память для строки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...