Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.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++ 快速排序分段错误(堆芯转储)_C++_Recursion_Quicksort_Core - Fatal编程技术网

C++ 快速排序分段错误(堆芯转储)

C++ 快速排序分段错误(堆芯转储),c++,recursion,quicksort,core,C++,Recursion,Quicksort,Core,我知道我的问题有多种答案,我理解为什么会这样,但我的主要问题是如何克服这个错误。我知道我正在尝试访问我无法访问的内存,但我不知道我是如何做到这一点的 #include <iostream> #include <string> #include <stdlib.h> using namespace std; int arr[] = {4,5,2,1,3}; int lengd = sizeof(arr)/sizeof(arr[0]); void swapN

我知道我的问题有多种答案,我理解为什么会这样,但我的主要问题是如何克服这个错误。我知道我正在尝试访问我无法访问的内存,但我不知道我是如何做到这一点的

#include <iostream>
#include <string> 
#include <stdlib.h>
using namespace std;

int arr[] = {4,5,2,1,3};
int lengd = sizeof(arr)/sizeof(arr[0]);

void swapNumber(int arr[], int i, int j){
     int tmp = arr[i];
     arr[i] = arr[j];
     arr[j] = tmp;
}

void partition(int arr[], int i, int j){
     int pivot = arr[j];
     while (i <= j) {
          while (arr[i] < pivot){
               i++;
          }
          while (arr[j] > pivot){
               j--;
          }
          if (i <= j) {
               swapNumber(arr, i, j);
               i++;
               j--;
          }
     }
}

void quickSort(int arr[], int left, int right) {
      int i = left;
      int j = right;

      partition(arr,left,right);


      if (left < j){
          quickSort(arr,left, j);
      }
      if (i < right){
          quickSort(arr, i, right);
      }
}

int main(){
    quickSort(arr,0, lengd-1);

    for(int i = 0; i < 5; i++){
        cout << arr[i] << endl;
     }
}
#包括
#包括
#包括
使用名称空间std;
int arr[]={4,5,2,1,3};
int lengd=sizeof(arr)/sizeof(arr[0]);
无效swapNumber(整数arr[],整数i,整数j){
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
无效分区(int arr[],int i,int j){
int pivot=arr[j];
而(我){
j--;
}

如果(iAs)您的编号在
分区
函数中不会被修改,您应该更改其签名以接收参考:

一切都会好起来的


使用调试器或位置良好的控制台消息很容易发现此类缺陷!

由于您的编号不会在
分区中被修改,您应该更改其签名以接收引用:

一切都会好起来的


使用调试器或位置良好的控制台消息很容易发现此类缺陷!

您是否尝试在调试器中运行以捕获实际发生的崩溃,并找到代码中发生的位置?当崩溃发生时,所有相关变量的值是多少?递归深度是多少(即调用堆栈上有多少个递归调用)?你试过使用内存调试器来帮助你吗?@pergy这是一个让浏览器屈服的恶作剧。Firefox不能很好地处理它。@Someprogrammerdude lol,sry。我从commentor中删除了链接,至少放了一个
std::你难道没有试过在调试器中运行来捕捉崩溃,并找到它在代码中的位置吗发生?当崩溃发生时,所有相关变量的值是多少?递归深度是多少(即调用堆栈上有多少个递归调用)?你试过使用内存调试器来帮助你吗?@pergy这是一个让浏览器屈服的恶作剧。Firefox不能很好地处理它。@Someprogrammerdude lol,sry。我从commentor中删除了链接,至少放了一个
std::cout谢谢,伙计,你真的帮了我的忙,给我展示了一个很酷的新把戏:)谢谢你,伙计,你真的帮了我大忙,给我展示了一个很酷的新把戏:)
void partition(int arr[], int& i, int& j)