0
바이너리 검색 트리를 작성했지만 정상적으로 작동하지만 내 프로그램이 모든 메모리를 해제하는지 확신 할 수 없습니다.C를 사용하여 이진 트리를 해제하는 방법은 무엇입니까?
여기에 나무 I 출력이 기능을 결과하고 무료 모든 노드를 쓰기
typedef struct node {
int val;
struct node *left, *right;
} nodeOfTree;
의 노드의 나의 정의, 대답은 잘하지만 메모리가 해제되지 않는 것 같다.
void outputAndDestroyTree(nodeOfTree *root) {
if (!root) {return;}
outputAndDestroyTree(root->left);
printf("%d ", root->val);
outputAndDestroyTree(root->right);
free(root); // I free this pointer, but after doing that, I can still access this pointer in the main() function
}
다시 말해서 재귀 함수에서 추억을 풀 수는 없습니까?
업데이트 ~~~~~ 주셔서 감사합니다 : 여러분 모두 감사합니다 ~
메모리가 해제되지 않은 것을 어떻게 알 수 있습니까? 무료 란 데이터를 덮어 써야한다는 것을 의미하지는 않습니다. – Wiz
'free'로, 당신은 무언가를 파괴하지 않고 있습니다. 메모리 영역과 데이터는 여전히 '사용되지 않음'으로 표시되어 있습니다. – Jokester
미리 할당 된 메모리 덩어리에 트리 노드를 저장하면 하나의'free()'로 전체 트리를 파괴 할 수 있습니다. 일종의 간단한 메모리 관리. 그러나 다른 사람들이 이미 지적했듯이 '자유'는 해방 된 * 메모리의 내용을 없애지는 않습니다. 단지 다른 할당에 사용 가능하게 만듭니다. – liuyu