Удаление памяти в C - PullRequest
       0

Удаление памяти в C

5 голосов
/ 20 января 2010

Как мне удалить память в C?

Например, у меня есть:

#include<stdlib.h>
#include<stdio.h>

struct list_el {
   int val;
   struct list_el * next;
};

typedef struct list_el item;

void main() {
   item * curr, * head;
   int i;

   head = NULL;

   for(i=1;i<=10;i++) {
      curr = (item *)malloc(sizeof(item));
      curr->val = i;
      curr->next  = head;
      head = curr;
   }

   curr = head;

   while(curr) {
      printf("%d\n", curr->val);
      curr = curr->next ;
   }
}

После того, как я создал элементы 1 - 10, как мне удалить и убедиться в этомне существует в памяти?

Ответы [ 3 ]

9 голосов
/ 20 января 2010

free() используется для освобождения памяти, которая была выделена с помощью malloc() / calloc(), например:

curr = head; 

while(curr) {
    item *next = curr->next;
    free(curr);
    curr = next;
}

head = NULL;

(временная переменная используется, поскольку содержимое curr не может бытьдоступ после того, как он был освобожден).

Кстати, лучший способ написать вашу malloc строку в C:

curr = malloc(sizeof *curr);

(Это означает, что строка остается правильной дажеесли тип curr изменен).

4 голосов
/ 20 января 2010
curr = head;
while (curr != NULL) {
    head = curr->next;
    free (curr);
    curr = head;
}

сделает это.

В основном он проходит curr по списку, удаляя его по ходу (используя head для сохранения следующего), пока у вас не закончатся элементы.

0 голосов
/ 20 января 2010
while(head != NULL)
{
  item* next = head->next;
  free(head);
  head = next;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...