我是否以正确的方式释放这个链表?

时间:2016-02-01 16:41:56

标签: c linked-list free

这是免费链接列表的正确方法吗?我有以下结构:

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吗?

1 个答案:

答案 0 :(得分:2)

是的,这是错误的

if (cursor.getCount() > 0)

释放free(tmp); tmp = tmp->next; 后,它变成了悬空指针(这就是为什么有些人会将其设置为tmp)。您不应该像NULL

那样尝试访问它

我会推荐这个版本免费

tmp->next