我正在編寫一個使用二叉樹數據結構的程序。當編寫例程以釋放所有節點時,我遇到了一個我無法解釋的特殊問題。使用二叉樹實現打印隨機數的內存自由函數
這是例程:
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);
其中根節點爲:NodeT *rootNode
;
任何想法?
爲什麼你需要用雙指針來寫這個?單指針會更簡單。 –
輸出從哪裏來?誰在印刷? –
我同意 - 但這是一個項目,我們被要求實施2星級指針。這會更簡單。 – sherrellbc