C++ C+中的快速排序+;对于std::vector,EXC\u错误\u访问代码2
VS代码在我运行快速排序算法时捕获此异常: EXC\u错误访问(代码=2,地址=0x7FFEF3FFFFC)。这发生在分区()的第一行:C++ C+中的快速排序+;对于std::vector,EXC\u错误\u访问代码2,c++,sorting,quicksort,exc-bad-access,stdvector,C++,Sorting,Quicksort,Exc Bad Access,Stdvector,VS代码在我运行快速排序算法时捕获此异常: EXC\u错误访问(代码=2,地址=0x7FFEF3FFFFC)。这发生在分区()的第一行: inti=p; 我已尝试实施Cormen算法: 为什么我不能访问变量p?它是否已发布,如果已发布,如何修复 我的代码 /.h文件 无效排序向量(向量和向量,int p=0,int r=-2); int划分(向量&vec,int p,int r); //.cpp文件 整数分割(向量和向量,整数p,整数r){ int i=p; 对于(int j=p;j您需要编写
inti=p;
我已尝试实施Cormen算法:
为什么我不能访问变量p?它是否已发布,如果已发布,如何修复
我的代码
/.h文件
无效排序向量(向量和向量,int p=0,int r=-2);
int划分(向量&vec,int p,int r);
//.cpp文件
整数分割(向量和向量,整数p,整数r){
int i=p;
对于(int j=p;j您需要编写交换(vec[i],vec[r-1]);
出for
循环
应该是这样的——
//.cpp file
int partition(vector<int> &vec, int p, int r) {
int i = p;
for (int j = p; j <r-1; ++j) {
if (vec[j] < vec[r-1]) {
swap(vec[j], vec[r-1]);
i++;
}
}
swap(vec[i], vec[r-1]);
return i;
}
/.cpp文件
整数分割(向量和向量,整数p,整数r){
int i=p;
对于(int j=p;j您需要编写交换(vec[i],vec[r-1]);
出for
循环
应该是这样的——
//.cpp file
int partition(vector<int> &vec, int p, int r) {
int i = p;
for (int j = p; j <r-1; ++j) {
if (vec[j] < vec[r-1]) {
swap(vec[j], vec[r-1]);
i++;
}
}
swap(vec[i], vec[r-1]);
return i;
}
/.cpp文件
整数分割(向量和向量,整数p,整数r){
int i=p;
对于(int j=p;j,两个函数都存在问题:
分区():
- 第一次交换有错误的论点
- 第二次掉期交易必须移出
for循环(由Faruk Hossain建议)
if(vec[j]
变成if(vec[j]两个函数都有问题:
分区():
- 第一次交换有错误的论点
- 第二次掉期交易必须移出
for循环(由Faruk Hossain建议)
if(vec[j]
变成了if(vec[j]这提供了一个很好的例子,表明程序的崩溃站点通常不在错误所在的位置。这是一个值得指出的错误,即使在未提供的代码中还有更多的错误。谢谢,这是几个错误之一。我将编辑文章以显示工作代码。这提供了一个很好的例子,说明程序的s崩溃站点通常不是bug所在的位置。这是一个值得指出的bug,即使在未提供的代码中还有更多的bug。谢谢,这是几个bug中的一个。我将编辑帖子以显示工作代码。崩溃的最可能原因是堆栈溢出。p
或I
(可能两者都有)不再在有效内存中。这是因为其他地方的错误,Faruk的回答证明是一个很好的候选错误和解决方案,防止递归结束。崩溃的最可能原因是堆栈溢出。p
或i
(可能两者都有)不再在有效内存中。这是因为其他地方有一个bug,Faruk的答案证明是一个很好的候选bug和解决方案,防止递归结束。