删除链表c ++中的最后一个节点时出错

时间:2014-04-07 11:39:39

标签: c++

我正在编写一些代码来删除链表中的最后一个节点,它是 工作但在将列表打印出来时抛出此错误。

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;
}

打印错误:

enter image description here

3 个答案:

答案 0 :(得分:0)

每当删除指针时,将指针设为NULL,例如

delete head;
head = (Student *)NULL;

此外,在开始时,在访问head-&gt; next

之前检查head!= NULL

答案 1 :(得分:0)

如果headNULLhead->next毫无意义,并会出现访问冲突错误。 headNULL后,请尝试从循环中突破。

while (input!=2)
{
    if (head==NULL)
        break;

答案 2 :(得分:0)

您永远不会更改任何节点的内容,也永远不会更改任何指针的值。

这意味着,在节点被销毁之后,next成员中的任何值通常都会在内存中存在。

幸运的是,您的调试版本将释放内存的内容设置为一个值,当您尝试访问它时会导致错误。

你要做的第一件事就是取出铅笔和纸,找出删除节点需要做什么 调试指针算法没有比手工绘制框和箭头更好的方法了。