首页 > 解决方案 > 分段错误(核心转储)是什么意思?(快速排序代码)

问题描述

我正在编写一个快速排序函数并且收到分段错误错误。我不确定这是为什么。任何帮助表示赞赏。这是我的代码。我知道错误意味着我正在尝试访问不存在的内存,但我不确定错误到底出在哪里。

#include <stdio.h>

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


int partition(int arr[], int first, int last){
  int pivot = arr[last];
  while(first <= last){
while(arr[first] < pivot){
  first++;
}
while(arr[last] > pivot){
  last--;
}
if(first <= last){
  swap(arr, arr[first], arr[last]);
  first++;
  last--;
}
}
}

void quickSortR(int arr[], int first, int last){
  if(last <= first) return;
  int mid = partition(arr, first, last);
  quickSortR(arr, first, mid-1);
  quickSortR(arr, mid+1, last);
}

void main() {
int arr[14] = {488888, 3, 5, 0, 23, 12124, 6, 7, 2, 1121, 0, 92, 5, 8};
quickSortR(arr, 0, 13);
for (int i = 0; i<14; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
}

标签: csegmentation-faultquicksort

解决方案


此函数返回 int 但您不返回任何内容:

int partition(int arr[], int first, int last){

所以它使mid处于未定义状态并使 arr[mid-1] 或 arr[mid] 超出范围

int mid = partition(arr, first, last);

请从函数partition返回值。


推荐阅读