我遇到了雙免費,我看不到它發生在哪裏。以下代碼的目標是從鏈接列表中刪除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