【发布时间】:2017-03-14 08:24:59
【问题描述】:
我知道我的问题有多个答案,我理解为什么会这样,但我的主要问题是如何克服这个错误。我知道我正在尝试访问我无法访问的内存,但我只是不知道我是如何做到这一点的。
#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;
}
}
当我在 quickSort 函数内运行 quickSort 函数时发生错误。我不知道该怎么办。
【问题讨论】:
-
您是否尝试过在调试器中运行以捕捉正在发生的崩溃,并在您的代码中找到它发生的位置?当崩溃发生时,所有涉及的变量的值是多少?递归深度是多少(即调用堆栈上有多少递归调用)?您是否尝试过使用诸如 Valgrind 之类的内存调试器来帮助您?
-
@pergy 这是一个让浏览器崩溃的恶作剧。 Firefox 不能很好地处理它。
-
@Someprogrammerdude 哈哈,不好意思。我从评论中删除链接
-
或者至少在你的分区函数中放一个
std::cout << i << ", " << j << std::endl;,看看发生了什么
标签: c++ recursion quicksort core