C++ 是否可以将新的ListNode分配给linkedlist的现有节点?

C++ 是否可以将新的ListNode分配给linkedlist的现有节点?,c++,C++,我正在编写一个函数,在与head1关联的列表中出现变量位置后,输入与head2关联的链表。但是,我不断得到一个核心转储: void mergeLists(ListNode *head1, ListNode *head2, const int &location){ ListNode *tail1, *tail2, *run; tail1=head1; tail2=head2; if(head1->pointer_Next!=nullptr){ while(t

我正在编写一个函数,在与head1关联的列表中出现变量位置后,输入与head2关联的链表。但是,我不断得到一个核心转储:

void mergeLists(ListNode *head1, ListNode *head2, const int &location){
  ListNode *tail1, *tail2, *run;
  tail1=head1;
  tail2=head2;
  if(head1->pointer_Next!=nullptr){
    while(tail1->content!=location){
      tail1=tail1->pointer_Next;
    }
    if(head2->pointer_Next!=nullptr){
      while(tail2->pointer_Next!=nullptr){
        run=tail1->pointer_Next;
        tail1->pointer_Next=new ListNode;
        tail1=tail1->pointer_Next;
        tail1->content=tail2->content;
        tail1->pointer_Next=run;
        tail2=tail2->pointer_Next;
      } 
    }
  }
  delete tail1;
  delete tail2;
  delete run;
}

12号线的操作是否有违法行为?我通过GDB运行了这个,我非常确定这就是问题所在。我曾尝试将指针设置为nullptr旁边,但它会产生相同的结果。有人知道内核转储发生在哪里吗?

您的代码有很多问题,即使不进行调试,我也能看到这些问题。请发布测试用例+错误+列表节点定义

void mergeLists(ListNode *head1, ListNode *head2, const int &location){
  ListNode *tail1, *tail2, *run;
  tail1=head1;
  tail2=head2;
  if(head1->pointer_Next!=nullptr){ <------ What if head1 is nullptr ?
    while(tail1->content!=location){  <---- What if tail1 is nullptr ?
      tail1=tail1->pointer_Next;      <---- What if tail1->pointer_Next is nullptr ?
    }
    if(head2->pointer_Next!=nullptr){  <--- What if head2 is nullptr ?
      while(tail2->pointer_Next!=nullptr){ <--- What if tail2 is nullptr ?
        run=tail1->pointer_Next;
        tail1->pointer_Next=new ListNode;
        tail1=tail1->pointer_Next;
        tail1->content=tail2->content;
        tail1->pointer_Next=run;
        tail2=tail2->pointer_Next;
      } 
    }
  }
  delete tail1; <---- Why do you delete tail1 , which is Node in the list
  delete tail2; <---- Why do you delete tail2 , which is Node in the list
  delete run;
}

听起来您可能需要学习如何使用调试器逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读: