gpt4 book ai didi

c++ - 为什么我在这里遇到段错误?

转载 作者:行者123 更新时间:2023-12-02 09:49:34 26 4
gpt4 key购买 nike

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

一切似乎都在工作,期待这个功能。我总是遇到段错误,我很困惑为什么会发生这种情况。

另外,我在上大学,所以可能有更有效的方法,但这是我可以做到的方式,无需提前了解类(class)。

我有一个名为 length 的变量来保存长度。那部分是老师实现的。

所以它给了我这个错误: Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffff8) .如何通过 code=2 和其他数字找出错误的含义?

最佳答案

有概率。很多事情都错了。这显示了如何使用 std::list 来完成。 .我不知道是否给出了 API,但让我们让它成为一个单独的函数,它需要一个列表。

template<typename T>
void mergesort( std::list<T>& list ){

如果我们有多个元素,则只有工作要做
    auto const size = list.size();
if( size > 1) {

然后将该列表拆分为两个列表。
        auto mid = list.begin();
std::advance( mid, size/2 );
std::list<T> other;
other.splice( other.begin(), list, list.begin(), mid );

现在我们有两个子列表,可以在它们上递归调用合并排序。
    mergesort( list );
mergesort( other );

然后需要合并部分结果。
    list.merge( other );        

我们完成了。见工作版本 here

关于c++ - 为什么我在这里遇到段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61332266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com