이진 트리 데이터 구조를 사용하는 프로그램을 작성하고 있습니다. 모든 노드를 자유롭게하는 루틴을 작성할 때 설명 할 수없는 특이한 문제를 발견했습니다.이진 트리 구현으로 메모리 프리 함수 난수 인쇄
이 루틴은 다음과 같습니다
void destroy_tree(NodeT **tree){
if(*tree != NULL){
destroy_tree(&(*tree)->left);
free((*tree)->left);
destroy_tree(&(*tree)->right);
free((*tree)->right);
}
return;
}
기본적으로 2 성급 포인터는 함수에 전달됩니다. 포인터를 해제하기 전에 각 노드가 NULL인지 확인합니다. NodeT
은 NodeT 구조에 대한 왼쪽 및 오른쪽 포인터를 포함하는 구조입니다. 이것들은 내가 풀려고하는 포인터들이다.
구조는 다음과 같이 정의됩니다 : 당신이 기대하는 것처럼) 자유없이
typedef struct{
int val;
struct tnode *right, *left;
}NodeT;
(호출 아무 반응이 없습니다. 무료 통화가 주석 때 그러나, 결과는 다음과 같다 :
나는 숫자 블록이 변경됩니다 프로그램을 실행하지만 그들은 항상 결국 충돌로 반복되는 각각의 시간을.
이 함수의 원래 통화는 당신이 기대하는 것입니다,
destroy_tree(&rootNode);
는 rootNode를은 여기서
NodeT *rootNode
;
아이디어가 있으십니까?
왜 이중 포인터로 작성해야합니까? 이것은 단일 포인터로 더 간단합니다. –
그 출력은 어디서 오는가? 누가 그것을 인쇄하고 있습니까? –
나는 동의한다 - 그러나 이것은 프로젝트이고 우리는 2 성급 포인터를 구현하도록 요청 받았다. 훨씬 더 간단합니다. – sherrellbc