Ошибка замены функции узла (C6011: разыменование нулевого указателя) [C ++] - PullRequest
0 голосов
/ 25 апреля 2020

Я сделал эту функцию, чтобы я мог переключаться между 2 узлами для моего связанного списка. Тем не менее, я обнаружил эту ошибку в своем коде, которая делает мою программу cra sh полностью. Сначала я не инициализировал tempNode1, поэтому он дал мне предупреждение. Я инициализировал его значением NULL, и теперь он выдает предупреждение C6011 с разыменовывающим указателем NULL. Я все равно скомпилировал несмотря на предупреждение и программа вылетает. Я запустил отладчик, и он будет работать, пока, наконец, не достигнет строки объявления tempNode1. Я не уверен, где я ошибаюсь в своем коде:

void Records::swapNodes(node* node1, node* node2) {

node* tempNode1 = nullptr;

tempNode1->ID = node1->ID;
tempNode1->first = node1->first;
tempNode1->last = node1->last;
tempNode1->DOB = node1->DOB;
tempNode1->GPA = node1->GPA;

node1->ID = node2->ID;
node1->first = node2->first;
node1->last = node2->last;
node1->DOB = node2->DOB;
node1->GPA = node2->GPA;

node2->ID = tempNode1->ID;
node2->first = tempNode1->first;
node2->last = tempNode1->last;
node2->DOB = tempNode1->DOB;
node2->GPA = tempNode1->GPA;

}

Любая обратная связь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Интересно, если вы создали новый экземпляр вместо того, чтобы просто создать узел * temp.

Пример. узел * temp = новый узел;

temp-> info_1; TEMP-> info_2; ... Затем поменяйте местами данные;

delete temp;

Надеюсь, это поможет.

0 голосов
/ 25 апреля 2020

Причина сбоя вашей программы в том, что с помощью строки tempNode1->ID = node1->ID вы пытаетесь разыменовать tempNode (оператор tempNode1->ID эквивалентен (*tempNode1).ID). Именно попытка разыменования tempNode1, когда оно равно nullptr, является причиной того, что вызывает sh. Вы можете избежать этого, установив tempNode, чтобы указать временное ненулевое значение, прежде чем использовать его для обмена, например, tempNode1 = &node().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...