我做了这个函数,这样我就可以为我的链接列表在两个节点之间进行交换。然而,我在我的代码中发现了这个错误,使我的程序完全崩溃。一开始,我没有初始化 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;
}
任何反馈都将是非常感激的。谢谢你!我做了这个函数,所以我可以做这个函数。
我想知道你是否创建了一个新的实例,而不是仅仅创建一个node* temp。
Ex.node* temp = new node;
temp->info_1;temp->info_2;...然后交换数据。
删除temp。
希望能帮到你。
你的程序崩溃的原因是由于你的程序中出现了以下一行 tempNode1->ID = node1->ID
你是在试图取消引用。tempNode
(声明中 tempNode1->ID
相当于 (*tempNode1).ID
). 试图取消引用的行为 tempNode1
当它 nullptr
是导致崩溃的原因。您可以通过设置 tempNode
指向一个临时的非空值,然后再使用它进行交换,例如。tempNode1 = &node()
.