私はダブルフリーで走っていますが、どこで起きているのか分かりません。次のコードの目的は、リンクされたリストから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
pmgが書いたように、関数内にはローカルコピーのみが設定されます。関数の外側でNULLに設定するか、参照(C++ではなくC++の機能)を渡す必要があります。 – Wolf
意味があります。ありがとうございました! – Mike