【问题标题】:access violation error in deletion of nodes of a tree删除树节点时的访问冲突错误
【发布时间】:2013-11-28 04:47:18
【问题描述】:

我正在使用标准程序删除树的所有节点,有序地遍历帖子并删除节点。当我使用前序遍历来显示空树时,我收到了访问冲突错误,我认为这是必须的带有一个空指针。

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);
}
}

【问题讨论】:

  • 问题与你的deleteallnodes函数无关。发布预购代码;这就是你的问题所在

标签: c tree


【解决方案1】:

删除节点时不会清除它们。把代码改成样子

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

否则,在preorder 中,if (root) 将成功删除节点,并且您将徘徊在您无法控制的内存中。

【讨论】:

  • 这不正确吗?随意说出什么不起作用(或通过单击“勾选”标记为正确)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多