我编写了一个将节点插入二叉搜索树的函数。但是,在尝试在Visual Studio 2013中构建解决方案时,我会收到:“BST.exe中0x00FD4CD0处的未处理异常:0xC0000005:访问冲突读取位置0xCCCCCCCC”。以下是我的代码。
void BST::insert(int value) {
Node* temp = new Node();
temp->data = value;
if(root == NULL) {
root = temp;
return;
}
Node* current;
current = root;
Node* parent;
parent = root;
current = (temp->data < current->data) ? (current->leftChild) : (current->rightChild);
while(current != NULL) {
parent = current;
current = (temp->data < current->data) ? (current->leftChild) : (current->rightChild);
}
if(temp->data < parent->data) {
parent->leftChild = temp;
}
if(temp->data > parent->data) {
parent->rightChild = temp;
}
}
然后在我的主要功能中我有:
int main() {
BST bst;
bst.insert(10);
system("pause");
}
当我删除bst.insert(10);在我的主函数中,我不再收到未处理的异常。
以下是我的struct
的初始化struct Node {
int data;
Node* leftChild;
Node* rightChild;
Node() : leftChild(NULL), rightChild(NULL) {}
};
struct BST {
Node* root;
void insert(int value);
BST() : root(NULL) {}
};
答案 0 :(得分:1)
在插入功能中,您没有将leftChild
和rightChild
设置为NULL。
void BST::insert(int value) {
Node* temp = new Node();
temp->data = value;
temp->leftChild = NULL;
temp->rightChild = NULL;
if(root == NULL) {
root = temp;
return;
}
另外,我无法确定(因为您没有发布BST
的构造函数),但您可能没有在BST
构造函数中将root设置为NULL。尝试这些修改。
好像你在BST中没有构建者来自你发布的内容:
struct BST {
Node* root;
void insert(int value);
BST(): root(NULL) { } // add a constructor to initialize root to NULL
};