Процесс вернул -1073741819 (0xC0000005) проблему при вставке значения - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь создать дерево AVL и вставить в него узел.Всякий раз, когда я пытаюсь добавить значение данных в узел дерева, моя программа аварийно завершает работу и возвращает значение 0xC0000005.Вот как я ввел элемент данных в заголовочный файл:

class AVLTreeNode
{
    public:
        int data;
        AVLTreeNode();
        virtual ~AVLTreeNode();
        AVLTreeNode(int d, AVLTreeNode *leftChild, AVLTreeNode *rightChild);
        AVLTreeNode *leftc;
        AVLTreeNode *rightc;
        int height;
}

Всякий раз, когда я пытаюсь запустить следующие строки кода в функции вставки, я получаю сбой.

AVLTreeNode *nw = NULL ;
nw->data = v;

Я не знаю, что я делаю неправильно, пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018
AVLTreeNode *nw = NULL;

Эта строка кода устанавливает nw в нулевой указатель, другими словами, он ни на что не указывает.Попытка разыменования нулевого указателя приведет к неопределенному поведению.Вам нужно выделить память для AVLTreeNode объекта, а затем заставить nw указать на него.

Вместо этого вам нужно вот что, которое выделяет память и указывает nw на него:

AVLTreeNode *nw = new AVLTreeNode;

И помните, всякий раз, когда вы выделяете память с помощью new, вы должны освободить ее, когда закончите с ней:

delete nw;
0 голосов
/ 26 ноября 2018

Код возврата 0xC0000005 означает STATUS_ACCESS_VIOLATION.(Вы можете найти этот и другие коды состояния NT на MSDN: Значения NTSTATUS .) Ошибка возникает из-за того, что NULL находится вне диапазона допустимых адресов для вашей программы.Перед разыменованием переменной-указателя вы должны присвоить ей адрес действительного объекта.Например:

AVLTreeNode* nw = new AVLTreeNode{};
nw->data = v;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...