我有一个结构的下面代码,用于定义链表的节点
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);
}
答案 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);
}