int main() {
BiTree *T;
cout << "創建二叉樹" << endl;
BiTree* creattree(); // 錯誤:這是函式宣告,非呼叫!
cout << "先序遍歷:"; preOrder(T); // T 未初始化,野指標
...
}
BiTree* creattree(); 被誤寫為函式宣告(function declaration),而非函式呼叫。導致 T 保持未初始化狀態,後續遍歷存取野指標觸發存取違規(Access Violation),程式直接崩潰而無編譯錯誤。
int main() {
BiTree *T = NULL;
cout << "創建二叉樹" << endl;
T = creattree(); // 正確:呼叫函式並接收回傳指標
if (T) {
cout << "先序遍歷:"; preOrder(T); cout << endl;
cout << "中序遍歷:"; inOrder(T); cout << endl;
cout << "後序遍歷:"; postOrder(T); cout << endl;
cout << "葉子節點為:"; TreeLeaf(T); cout << endl;
cout << "樹的深度:" << PostTreeDepth(T) << endl;
}
return 0;
}
inOrder、postOrder 錯誤呼叫 preOrder 而非自我遞迴TreeLeaf 使用全域變數 LeafNum 非執行緒安全,建議改為回傳值-Wall -Wextra 可捕捉「函式宣告被誤用」警告-fsanitize=address 偵測記憶體錯誤