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

C++ 进程返回-插入值时出现1073741819(0xC0000005)问题,c++,windows,memory,C++,Windows,Memory,我正在尝试创建一个AVL树并在其中插入一个节点。每当我尝试在树节点上添加数据值ı时,我的程序就会崩溃并返回值0xC0000005。以下是我在头文件中引入数据项的方式: class AVLTreeNode { public: int data; AVLTreeNode(); virtual ~AVLTreeNode(); AVLTreeNode(int d, AVLTreeNode *leftChild, AVLTreeNod

我正在尝试创建一个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的返回代码表示
状态\u访问\u违规
。(您可以在MSDN:上找到此和其他NT状态代码。)发生此错误的原因是
NULL
超出了程序的有效地址范围。在取消引用指针变量之前,必须为其指定有效对象的地址。例如:

AVLTreeNode* nw = new AVLTreeNode{};
nw->data = v;
这行代码将
nw
设置为空指针,换句话说,它不指向任何东西。尝试取消引用空指针将导致未定义的行为。您需要为
AVLTreeNode
对象分配内存,然后让
nw
指向它

您需要的是这个,它分配内存并指向
nw

AVLTreeNode *nw = new AVLTreeNode;
请记住,每当您使用
new
分配内存时,您都需要在完成后取消分配它:

delete nw;

AVLTreeNode*nw=NULL;nw->data=v这是未定义的行为。改为创建一个对象。指针必须指向一个实例(也称为对象),以便使用其中的方法和变量。您现在说的是
AVLTreeNode*nw
为“NULL”。然后,访问空指针以设置值。确保指针指向一个目标object@PeterRuderman你为什么一直添加窗口?没有理由在此处使用windows标记。返回代码0xC0000005是特定于windows的。它发生在你的程序因访问冲突而崩溃时。OP显然是一个初学者,但这确实意味着他不认真。他花了些时间将事故范围缩小到一条特定的线路,并根据本网站的要求发布了一篇文章。理解0xC0000005返回码的含义也是有用的,这是常识。“换句话说,它指向胡言乱语”-不,这不是它的意思
NULL
(或
nullptr
)是指针不指向任何地方的指定值。“尝试访问空指针将始终导致运行时错误。”-再次错误。访问空指针总是安全的。另一方面,取消对空指针的引用会导致未定义的行为。这可能会也可能不会导致运行时错误。我想我找到了问题的答案。谢谢您的支持answers@IInspectable你说得很对,我已经更新了我的帖子以反映你的更正。“尝试取消引用空指针总是会导致运行时错误。”-不正确。在语言规范中明确未定义取消引用空指针时会发生什么情况。任何事情都有可能发生。如果发现未定义的行为,编译器可能会拒绝该程序。或者它可以应用不会导致运行时错误的优化。当他们编译一个表现出未定义行为的程序时,仔细看看他们之间的差异有多大也应该起作用。一般的经验法则是避免动态分配,直到它强加给您。AVL树是动态分配是最实用的解决方案之一。Node。射击不知什么原因,我以为这就是那棵树。是的,动态的。树,可能是自动的。
delete nw;