运行合并排序递归算法时EXC_BAD_ACCESS错误
EXC_BAD_ACCESS error while running merge sort recursion algorithm
我尝试在 MacOSx 的 Xcode11 上使用递归程序运行我的合并排序算法,但出现以下错误 -线程 1:EXC_BAD_ACCESS(代码 = 2,地址 = 0x7ffeef3ffff8(
我找不到解决方案。 请在下面找到我使用的代码。
#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;
}
你有无限递归。您的mergeSort
函数总是调用自身(两次(,从而导致堆栈溢出。
至少你应该放一些类似的东西
if (arr.size() <= 1) return arr;
在函数的开头。但你也可能有其他问题。
我花了大约两分钟才使用调试器找到这个问题。我运行你的代码直到它崩溃,检查调用堆栈,并立即看到无限递归。您应该学习如何使用调试器。当你有这项技能时,编程会容易得多。
不过,为提供 MRE 而点赞。
相关文章:
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- "Access is Denied" U盘上的创建文件()
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 例外:'Access violation reading location'
- 向量数组"Cannot access memory at address"
- Windeployqt不会运行,"Access is denied."
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++
- Access C++ Enum from Swift
- Java 本机访问代码错误:"Invalid memory access"
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 如何获得私人会员的"read access"?
- 将数据添加到 CArray 会产生错误"cannot access private member declared in class 'CObject'"
- Bad Linux Memory Map File Performance with Random Access C++ & Python