编写一个释放从链表创建的内存的函数

时间:2014-02-10 02:55:50

标签: c malloc

我有一个结构的下面代码,用于定义链表的节点

struct list {
    struct student s;
    struct list *next;
};

我的学生结构定义如下

struct student{
    unsigned short year;
    unsigned short grade;
    unsigned char *details;
};

假设我的程序创建了一个学生链接列表,我想编写一个函数来释放我所做的每一个malloc调用。

在我的程序中,每次初始化*详细信息时都会进行malloc调用,每次我为列表创建一个节点。

如果这有帮助,这是我创建节点的函数:

struct list *create_node(struct student *p) {
    struct list *node = malloc(sizeof(struct list));
    node->p = *p;
    node->next = NULL;
    return node;
}

我想写一个函数来解析用malloc创建的所有内存来保存列表。

这是我的尝试

void free_list(struct list *node){

    // free this first node
    free(node->p.details);
    while (node->next != NULL){
        // become the next node and free
        node = node->next;
        free(node->p.details);
    }

1 个答案:

答案 0 :(得分:2)

你的自由功能可以像这样

void free_list(struct list *node){

struct list  *temp = NULL;

// free this first node
//free(node->p.details);
while (node != NULL){
    temp = node;
    // become the next node and free
    node = node->next;
    free(temp->p.details);
    temp->p.details = NULL;
free(temp);
}