나는 두 번 무료로 실행 중이며 어디서 그런 일이 일어나는 지 볼 수 없다. 다음 코드의 목적은 링크 된 목록에서 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