我是否以正确的方式释放了这个链表?
Am I freeing this linked list in the correct manner?
这是释放链表的正确方法吗?我有以下结构:
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;
}
}
这是释放链表的正确方法吗?我有以下结构:
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;
}
}