我正在编写一些代码来删除链表中的最后一个节点,它是 工作但在将列表打印出来时抛出此错误。
void deleteRecords(Student* head) {
Student* current = head;
while (input != 2) {
cout << "Do you want to delete records? 1 = yes, 2 = nein: " << endl;
cin >> input;
if (input == 1) {
Student* current = head;
if (head->next) {
current = head->next;
delete head;
head = current;
}
}
}
printDetails(head);
}
打印详细信息:
void printDetails(Student* head) {
struct Student* current = head; // Current holds the current item in the list
// (holds name, stock etc...)
if (head == NULL) {
return;
}
while (current != NULL) // While not at end of the list...
{
double total = 0;
cout << current->id << " " << current->firstName << " "
<< current->lastName << " " << current->course << " " << current->yos
<< endl; // Output
current = current->next; // Point to the next item in link list...
}
cout << endl;
}
打印错误:
答案 0 :(得分:0)
每当删除指针时,将指针设为NULL,例如
delete head;
head = (Student *)NULL;
此外,在开始时,在访问head-&gt; next
之前检查head!= NULL答案 1 :(得分:0)
如果head
为NULL
,head->next
毫无意义,并会出现访问冲突错误。 head
为NULL
后,请尝试从循环中突破。
while (input!=2)
{
if (head==NULL)
break;
答案 2 :(得分:0)
您永远不会更改任何节点的内容,也永远不会更改任何指针的值。
这意味着,在节点被销毁之后,next
成员中的任何值通常都会在内存中存在。
幸运的是,您的调试版本将释放内存的内容设置为一个值,当您尝试访问它时会导致错误。
你要做的第一件事就是取出铅笔和纸,找出删除节点需要做什么 调试指针算法没有比手工绘制框和箭头更好的方法了。