为什么在这里会出现分割错误?

问题描述 投票:0回答:2
void LinkedList<T>::mergeSort(Node*& curr) {
    if(curr->next!=nullptr)//Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffff8)
    {
      Node* ptr1=nullptr;
      Node* ptr2=curr;
 //splits linked list
    for(int i=0;i<getLength()/2;i++)
     {
       ptr1=ptr2;
       ptr2=ptr2->next;
     }
      ptr1->next=nullptr;
      ptr1=curr;
  //recursive call for sorting
      mergeSort(ptr1);//Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffff8)
      mergeSort(ptr2);
  //merge lists back together
      if(ptr1==nullptr)
         curr=ptr2
      else if(ptr2==nullptr)
         curr=ptr1

       Node* reff=ptr1;

     while(reff->next !=nullptr)
     {
     reff=reff->next;
     }
     reff->next=ptr2;

      curr=reff;
      }
   }

一切似乎都正常,请期待此功能。我总是会遇到细分错误,但我很困惑为什么会这样。

此外,我正在上大学,所以可能会有一种更有效的方法,但这是我可以做到的方式,而无需提前学习课程。

我有一个叫做length的变量,它保存了长度。这部分是由老师实施的。

所以它给了我这个错误:线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffeef3ffff8)。如何通过code = 2和其他数字找出错误的含义?

c++ c++11 linked-list nodes mergesort
2个回答
1
投票
for(int i=0;i<getLength()/2;i++)

1
投票

有概率。许多事情错了。这显示了如何使用std::list完成。我不知道是否提供了API,但让它成为需要列表的独立函数。

© www.soinside.com 2019 - 2024. All rights reserved.