我正试图创建一个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;
我不知道我做错了什么,请帮帮我。
返回代码0xC0000005表示STATUS_ACCESS_VIOLATION
。(您可以在MSDN上找到此和其他NT状态代码:NTSTATUS值。(发生此错误的原因是NULL
超出了程序的有效地址范围。在取消引用指针变量之前,必须为其指定有效对象的地址。例如:
AVLTreeNode* nw = new AVLTreeNode{};
nw->data = v;
AVLTreeNode *nw = NULL;
这行代码将nw
设置为空指针,换句话说,它不指向任何东西。试图取消引用null指针将导致未定义的行为。您需要为AVLTreeNode
对象分配内存,然后让nw
指向它
相反,您需要的是这个,它分配内存并将nw
指向它:
AVLTreeNode *nw = new AVLTreeNode;
记住,每当你用new
分配内存时,你都需要在完成它时解除分配:
delete nw;