如何删除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后,如何删除它并确保它不存在于内存中?
答案 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;
}