在C中删除内存

时间:2010-01-20 03:46:17

标签: c

如何删除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 个答案:

答案 0 :(得分:9)

free()用于释放使用malloc() / calloc()分配的内存,如下所示:

curr = head; 

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

head = NULL;

(使用临时变量是因为curr的内容在被释放后无法访问。

顺便说一下,在C中编写malloc行的更好方法是:

curr = malloc(sizeof *curr);

(这意味着即使更改curr的类型,该行仍然正确)。

答案 1 :(得分:4)

curr = head;
while (curr != NULL) {
    head = curr->next;
    free (curr);
    curr = head;
}

会这样做。

它基本上遍历列表curr,一直删除(使用head存储下一个),直到你的元素用完为止。

答案 2 :(得分:0)

while(head != NULL)
{
  item* next = head->next;
  free(head);
  head = next;
}