由於我不明白爲什麼我會得到一個,所以顯然我對分割錯誤感到困惑。我試圖遍歷一個我已經構建的樹,我已經測試並且工作正常。但是,當我嘗試運行以下功能時,出現分段錯誤。任何人都可以告訴我我在哪裏以及爲什麼會出現分段錯誤,以便將來避免這種情況?謝謝。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