我正在尝试创建AVL树并将一个节点插入其中。每当我尝试在树节点中添加数据值时,我的程序就会崩溃并返回值0xC0000005。这就是我在头文件中介绍数据项的方式:
class AVLTreeNode
{
public:
int data;
AVLTreeNode();
virtual ~AVLTreeNode();
AVLTreeNode(int d, AVLTreeNode *leftChild, AVLTreeNode *rightChild);
AVLTreeNode *leftc;
AVLTreeNode *rightc;
int height;
}
每当我尝试在insert函数中运行以下代码行时,都会崩溃。
AVLTreeNode *nw = NULL ;
nw->data = v;
我不知道我在做什么错,请帮助我。
答案 0 :(得分:1)
返回码0xC0000005表示STATUS_ACCESS_VIOLATION
。 (您可以在MSDN上找到此NT状态代码和其他NT状态代码:NTSTATUS Values。)由于NULL
超出了程序的有效地址范围,因此发生错误。在取消引用指针变量之前,必须为其分配有效对象的地址。例如:
AVLTreeNode* nw = new AVLTreeNode{};
nw->data = v;
答案 1 :(得分:-1)
AVLTreeNode *nw = NULL;
这行代码将nw
设置为空指针,换句话说,它没有指向任何内容。尝试取消引用空指针将导致未定义的行为。您需要为AVLTreeNode
对象分配内存,然后让nw
指向它。
相反,您需要的是此方法,该方法分配内存并指向nw
:
AVLTreeNode *nw = new AVLTreeNode;
请记住,每当您使用new
分配内存时,都需要在完成使用后对其进行分配:
delete nw;