我正在尝试实现自平衡二进制搜索树。当我尝试获得正确分支的高度时,它会一直起作用,直到达到这一点为止。然后,我得到一个分段错误错误,并且valgrind说有一个无效的大小为8的读取。奇怪的是,当我看着树出现此错误时,右分支不为null。是否有一些我遗忘的检查会导致此错误?
引发错误的行:
int rightChildHeight = 0;
if (n->right != NULL)
rightChildHeight = n->right->getHeight();
getHeight():
int Node::getHeight()
{
// No kids => 2
if (!left && !right)
return 1;
// 1 kid => height of kid +1
else if (!left && right)
return right->getHeight() + 1;
else if (left && !right)
return left->getHeight() + 1;
// 2 kids => height of taller kid +1
else
return max(left->getHeight(), right->getHeight()) + 1;
}
发生错误时的树:
答案 0 :(得分:0)
检查是否将left
和right
指针初始化为nullptr
。可能不是,并且它正在从该内存位置获取随机数据,使指针存在,但它并不指向具有right
属性的对象。另外,如果您在此之前删除任何节点,请向我们显示delete方法和insert方法。这些功能之一可能有问题。
此外,您还应尝试与代码保持一致,首先要检查像if (n->right != NULL)
这样的可为空性,然后要像这样if (!left && !right)
那样,老实说,我更喜欢第二种方式,它更干净。