c - 分段错误(核心转储)是什么意思?(快速排序代码)
问题描述
我正在编写一个快速排序函数并且收到分段错误错误。我不确定这是为什么。任何帮助表示赞赏。这是我的代码。我知道错误意味着我正在尝试访问不存在的内存,但我不确定错误到底出在哪里。
#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]);
}
}
解决方案
此函数返回 int 但您不返回任何内容:
int partition(int arr[], int first, int last){
所以它使mid处于未定义状态并使 arr[mid-1] 或 arr[mid] 超出范围
int mid = partition(arr, first, last);
请从函数partition返回值。
推荐阅读
- r - 如何将公式应用于数据框中的每个值?
- c# - 如何在 .NET 应用程序中向 Visa Reader NFC 发送金额或十进制数字?
- linux - 如何在 Linux 中构造一个管道以按日期和名称对其他文件中的 python 文件进行排序?
- java - Spring数据:批量删除实体列表
- c# - System.Dynamic.Linq.Core + PostreSql 调用 date_part 函数
- windows - 无法在 Windows 上的 dockerized 服务上分配请求的地址
- javascript - 在画布上循环对象 JS P5
- r - check_for_unknown_vars_impl(model, the_ast) 中的错误:表达式包含不属于模型的变量
- powershell - 在 Jenkins 中,如何将 Web 请求正文作为参数传递给 Powershell 脚本?
- javascript - JavaScript 表单验证意外工作并打印未定义