Невозможно освободить структуру - PullRequest
0 голосов
/ 20 марта 2019

Мне не удалось освободить структуру.Мое понимание «free (void *)» заключается в том, что после освобождения указателя можно повторно использовать адрес переменной и памяти.Это не тот случай, приведенный ниже,

struct list {
  struct list_node * head;
  int size;
  };
typedef struct list list;

//create
list * create_list() {
    list * l = (list *) malloc(sizeof(list));
    l->head = NULL;
    l->size = 0;
    return l;
}

int main(int argc, char const *argv[]) {

    list * l = create_list();
    free(l);
    list * l = create_list();

    return 0;
}

main.c: 25: 12: ошибка: переопределение списка 'l' * l = create_list ();^ main.c: 23: 12: примечание: предыдущее определение здесь list * l = create_list ();^ 1 ошибка сгенерирована.

1 Ответ

2 голосов
/ 20 марта 2019

Нельзя объявлять переменную дважды в одной и той же области видимости.Вот почему вы получаете ошибку переопределения.

Указатель вашего списка также является переменной.Вы не должны повторно объявлять l в своей основной функции.

Ваш компилятор уже знает, что это list *, поэтому вы должны удалить list * в строке 19.

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

...