这是免费链接列表的正确方法吗?我有以下结构:
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->next
之前我应该tmp
吗?
答案 0 :(得分:2)
是的,这是错误的
if (cursor.getCount() > 0)
释放free(tmp);
tmp = tmp->next;
后,它变成了悬空指针(这就是为什么有些人会将其设置为tmp
)。您不应该像NULL
我会推荐这个版本免费
tmp->next