由于我不明白为什么我会得到一个,所以显然我对分割错误感到困惑。我试图遍历一个我已经构建的树,我已经测试并且工作正常。但是,当我尝试运行以下功能时,出现分段错误。任何人都可以告诉我我在哪里以及为什么会出现分段错误,以便将来避免这种情况?谢谢。C - 为什么会出现分段错误?
void traverse(Node *root)
{
Node *pointer;
Node *pre;
if(root == NULL)
return;
pointer = pre;
while(pointer != NULL)
{
if(pointer->leftChild != NULL)
pointer = pointer->rightChild;
else
{
pre = pointer->leftChild;
while(pre->rightChild != NULL && pre->rightChild != pointer)
pre = pre->rightChild;
if(pre->rightChild != NULL)
{
pre->rightChild = pointer;
pointer = pointer->leftChild;
}
else
{
pre->rightChild = pointer;
pointer = pointer->leftChild;
}
}
}
}
你永远不会初始化'pointer'或'pre',并且基本上完全忽略了作为参数传入的'root'节点,所以你试图在undefined/uninitialized结构中解引用指针。 –
同样在第13行,您正在检查左侧节点是否为空,然后您访问正确的节点。 – martin
在C中始终正确初始化任何变量,代码在写入之前将读取它。 – alk