我遇到了双免费,我看不到它发生在哪里。以下代码的目标是从链接列表中删除Person节点。C双免费问题
typedef struct person {
char *first ;
char *last ;
char *location ;
struct person *next_person ;
} person ;
struct person_list {
int num_persons ;
person *first_person ;
} person_list ;
extern struct person_list person_list ;
void free_person(person *person) {
free(person->first);
person->first = NULL;
free(person->last);
person->last = NULL;
free(person->location);
person->location = NULL;
free(person);
person = NULL;
}
...
if (person_list.num_persons > 0) {
while (person_list.num_persons > 0) {
//Iterate to the end of the chain.
cur_person = person_list.first_person;
while (cur_person->next_person != NULL) {
cur_person = cur_person->next_person;
}
free_person(cur_person);
person_list.num_persons--;
}
}
...
但是free_person将该人设置为NULL。为什么这不起作用? – Mike 2010-12-15 21:30:59
由于pmg写道,它只设置函数内的本地副本。你需要在函数之外将它设置为NULL,或者传递一个引用(这是一个C++特性,而不是C)。 – Wolf 2010-12-15 21:33:59
有道理。谢谢! – Mike 2010-12-15 21:34:16