这是释放链表的正确方法吗?我有以下结构:
struct Courses{
char *courseName;
int creditValue;
Courses *next;
}Courses;
struct Student{
char *name;
int age;
Courses *list; //First course (node)
}Student;
这是我的免费功能:
void freeStudent(Student *student){
struct Courses *tmp = student->list;
while(tmp != NULL){
free(tmp->name);
free(tmp);
tmp = tmp->next;
}
}
我的免费功能订购错误了吗?我应该在释放 tmp
之前执行 tmp = tmp->next
吗?
最佳答案
是的,这是错误的
free(tmp);
tmp = tmp->next;
释放tmp
后,它变成一个悬空指针(这就是为什么有些人会将其设置为NULL
)。您不应该尝试像这样 tmp->next
我推荐这个免费版本
void freeStudent(Student *student){
struct Courses *tmp = student->list, *pre;
while(tmp != NULL){
free(tmp->name);
pre = tmp->next;
free(tmp);
tmp = pre;
}
}
关于c - 我是否以正确的方式释放这个链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135690/