插入值

时间:2018-11-26 16:02:38

标签: c++ windows memory

我正在尝试创建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;

我不知道我在做什么错,请帮助我。

2 个答案:

答案 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;