【发布时间】:2015-02-03 23:10:50
【问题描述】:
有人介意简要解释一下为什么我不断从这段代码中得到分段错误吗?
"target" 是要删除的节点,我试图用左分支上最右边的叶子替换它。 "parent" 是目标的父级。
else if (target->left != NULL && target->right != NULL) {
Node * childishDad = target;
Node * childish = target->left;
while(childish->right != NULL){
childishDad = childish;
childish = childish->right;
}
if(parent->left == target)
parent->left = childish;
if(parent->right == target)
parent->right = childish;
childish->left = target->left;
childish->right = target->right;
if(childishDad != target)
childishDad->right = NULL;
delete target;
return true;
}
【问题讨论】:
-
早期,您尝试访问
childish->right。你确定childish不是NULL吗?您的调试器是否向您显示了您的段错误在哪一行? -
@DrewDormann +1 表示“您的调试器是否向您显示了您的段错误在哪一行?”
-
@DrewDormann,
childish不能是NULL。在分配之前,所有对幼稚的分配都经过NULL测试。 -
感谢您的帮助。我意识到我没有检查是否
parent == NULL,所以在我试图删除根节点的情况下它失败了。
标签: c++ c pointers binary-tree binary-search-tree