2013-11-27 55 views
0

我正在使用標準過程刪除樹的所有節點,遍歷後有序並刪除節點。當我使用前序遍歷來顯示空樹時,我得到訪問衝突錯誤,我相信這與空指針有關。在刪除樹的節點時出現訪問衝突錯誤

void deleteallnodes(struct node **head){ 
    if(*head==NULL) 
     return ; 
    { 
    deleteallnodes(&((*head)->left)); 
    deleteallnodes(&((*head)->right)); 
    free(*head); 
    } 
} 
void main() { 
    insert(&root,5); 
    insert(&root,10); 
    insert(&root,2); 
    deleteallnodes(&root); 
    preorder(root); 
} 
void preorder(struct node *root) 
{ 
if (root) 
{ 
    printf("\t %d",root->data); 
    preorder(root->left); 
    preorder(root->right); 
} 
} 
+1

這個問題與你的'deleteallnodes'函數無關。發佈預訂代碼;那是你問題的地方是 – smac89

回答

0

當您刪除它們時,您並未清除節點。更改代碼看起來像

free(*head); 
*head = NULL; // add this line 

否則,在preorderif (root)將已刪除節點的成功,你會漫步到內存中,你不用管。

+0

這是不正確的?隨意說出什麼不起作用(或點擊「打勾」標記爲正確)。 –