在C中删除内存

在C中删除内存,c,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++) {

如何在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 ;
   }
}
#包括
#包括
结构列表{
int-val;
结构列表_el*下一步;
};
类型定义结构列表项;
void main(){
项目*curr,*head;
int i;
head=NULL;
对于(i=1;ival=i;
当前->下一步=头部;
水头=电流;
}
curr=头;
while(curr){
printf(“%d\n”,curr->val);
当前=当前->下一步;
}
}
创建项目1-10后,如何删除它并确保它不存在于内存中?

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
的类型,该行仍保持正确)

我会的


它基本上会在列表中穿行
curr
,边删除(使用
head
存储下一个),直到元素用完。

该死,9秒。我们是唯一有代码示例的人,但你赢了。@GMan,你想解释一下你的“pax欺骗”吗在你的回答中发表评论?你是一个五岁的孩子吗?在网上开玩笑,兄弟。我想我应该笑一笑。没问题,现在明白了。但新的更糟:-)新的让你像酋长一样冷静:]你已经
void
ed
main
。请不要那样做。它不喜欢你那样做。
while(head != NULL)
{
  item* next = head->next;
  free(head);
  head = next;
}
while(head != NULL)
{
  item* next = head->next;
  free(head);
  head = next;
}