Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运行合并排序递归算法时EXC_BAD_访问错误_C++_Debugging_Recursion_Mergesort_Xcode11.4 - Fatal编程技术网

C++ 运行合并排序递归算法时EXC_BAD_访问错误

C++ 运行合并排序递归算法时EXC_BAD_访问错误,c++,debugging,recursion,mergesort,xcode11.4,C++,Debugging,Recursion,Mergesort,Xcode11.4,我试图在MacOSx的Xcode11上使用递归程序运行我的合并排序算法,但我得到以下错误- 线程1:EXC\u坏访问(代码=2,地址=0x7FFEF3FFFF8) 我找不到解决这个问题的办法。 请在下面找到我使用的代码 #include <iostream> #include <vector> using namespace std; void printArray(vector<int> arr){ for(int x: arr){

我试图在MacOSx的Xcode11上使用递归程序运行我的合并排序算法,但我得到以下错误- 线程1:EXC\u坏访问(代码=2,地址=0x7FFEF3FFFF8)

我找不到解决这个问题的办法。 请在下面找到我使用的代码

#include <iostream>
#include <vector>

using namespace std;

void printArray(vector<int> arr){
    for(int x: arr){
        cout<<x<<" ";
    }
    cout<<endl;
}

vector<int> mergeSort(vector<int> arr){
    vector<int> B,C;
    unsigned long Na = arr.size();
    unsigned long Nb, Nc;
    Nb = Na/2 + (Na%2);
    Nc = Na - Nb;
    for (int i =0;i<Na;i++){
        if (i<Nb)
            B.push_back(arr[i]);
        else
            C.push_back(arr[i]);
    }
    B = mergeSort(B);
    C = mergeSort(C);
    int i=0,j=0;
    for(int k=0;k<Na;k++){
        if(B[i]<C[j]){
            arr[k] = B[i];
            i++;
        }
        else if(C[j]<=B[i]){
            arr[k] = C[j];
            j++;
        }
    }
    return arr;
}

int main() {
    vector<int> A{5,4,1,8,7,2,6,3};
    cout<<"Unsorted Array: "<<endl;
    printArray(A);
    A = mergeSort(A);
    cout<<"Sorted Array: "<<endl;
    printArray(A);
    return 0;
}
#包括
#包括
使用名称空间std;
无效打印阵列(矢量阵列){
用于(整数x:arr){

您可能有无限递归。您的
mergeSort
函数总是调用自身(两次),导致堆栈溢出

至少你应该放一些

if (arr.size() <= 1) return arr;

if(arr.size())很可能在边界之外运行。在本例中确实如此。未正确检查B[i]和C[j]的边界。无法保证这些边界是合适的[有效的]伪代码示例:-明确注意
.i=iEnd..
在合并时使用。即使第一次拆分到两个不同的集合时也会使用相同的方法,只是会根据实现进行更改。感谢您提供的Wikipedia源代码!我一定会查看它。更好的是^ ^非常感谢您!关于如何学习使用调试器的任何提示?我是新手。@AdithyaVenkat这看起来是一个不错的例子介绍,但我对Xcode几乎一无所知。