进程返回-插入值时出现1073741819(0xC0000005)问题



我正试图创建一个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;