2010-01-20 69 views
4

如何删除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,我怎么删除它并确保它不存在于内存中?

+2

你已经'无效''main'。请不要这样做。当你这样做时,它不喜欢它。 http://c-faq.com/decl/main.html – 2010-01-20 05:46:14

回答

8

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
curr = head; 
while (curr != NULL) { 
    head = curr->next; 
    free (curr); 
    curr = head; 
} 

会做到这一点。

它基本上走curr整个列表,删除它(用head来存储下一个),直到你用尽了元素。

+0

该死的,9秒。我们是唯一有代码样本的人,但是你赢了。 – GManNickG 2010-01-20 03:50:02

+0

@GMan,你想在你的回答中解释你的“pax作弊”评论吗?你是一个五岁的孩子吗? – paxdiablo 2010-01-20 04:26:31

+0

在互联网上的笑话火腿。猜猜我应该有一个笑脸。 – GManNickG 2010-01-20 04:43:09

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