在C中删除内存

Sup*_*ing 5 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 ;
   }
}
Run Code Online (Sandbox Code Playgroud)

在我创建项目1 - 10后,如何删除它并确保它不存在于内存中?

caf*_*caf 9

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

curr = head; 

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

head = NULL;
Run Code Online (Sandbox Code Playgroud)

(使用临时变量是因为curr释放后无法访问其内容).

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

curr = malloc(sizeof *curr);
Run Code Online (Sandbox Code Playgroud)

(这意味着即使curr更改了类型,线仍然正确).