我正在用C ++编写一个程序,但我无法弄清楚为什么我会一直遇到分段错误。以下是我目前使用的代码部分,这给我带来了麻烦:
在我的主要功能中:
Tree* myTree;
myTree = CreateBST();
const Element a = 23;
InsertBST(myTree, a);
const Element b = 8; //If I get rid of this line and the next one, the error goes away.
InsertBST(myTree, b); //But I need to be able to insert data into my tree beyond just the root!
然后是insertBST函数本身及其辅助函数:
void InsertBST(Tree * rTree, const Element nData){
rTree->root = InsertNodeBST(rTree->root, nData);
}
//========================================================================================
TreeNode* InsertNodeBST(TreeNode* rNode, const Element nData)
{
if(rNode->data == -999) //A new tree's root->data will always be initialized to -999
{
TreeNode* rNew = new TreeNode;
rNew->data = nData;
rNew->left = NULL;
rNew->right = NULL;
return rNew;
}
else if(rNode == NULL)
{
TreeNode* rNew = new TreeNode;
rNew->data = nData;
rNew->left = NULL;
rNew->right = NULL;
return rNew;
}
else if(nData == rNode->data)
{
return rNode;
}
else if(nData < rNode->data)
{
rNode->left = InsertNodeBST(rNode->left, nData);
return rNode;
}
else
{
rNode->right = InsertNodeBST(rNode->right, nData);
return rNode;
}
}
我们需要使用的结构如下:
struct TreeNode {
Element data;
TreeNode *left;
TreeNode *right;
};
struct Tree{
TreeNode *root;
};
有没有人看到我明显错过的可能导致我的分段错误?我是CS的新手,我在7年内参加了我的第一次CS课程,所以如果这是一个明显的错误我道歉。感谢。
答案 0 :(得分:1)
if (rNode->data == -999)
{
...
}
else if (rNode == NULL)
{
...
}
如果rNode
为NULL
,则rNode->data
崩溃。你的意思是以相反的顺序放置这些if
吗?