我使用此代码获得了分段错误:
#include <stdio.h>
#include <math.h>
void dsort(int a[], int start, int end){
int l = end - start + 1; //this is the line it is segfaulting
if(l == 2){
if(a[end] > a[start]){
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
}else{
double calc = (2*l)/3;
int m = ceil(calc);
dsort(a, start, m - 1);
dsort(a, end - m, end);
dsort(a, start, m - 1);
}
}
int main(){
int a[4] = {3,4,2,5};
int start = 0;
int end = 4-1;
dsort(a,start,end);
int i = 0;
for(i; i<=3;i++){
printf("%i\n",a[i]);
}
}
我不确定为什么它会在那个地方发生分裂。任何人都知道如何解决这个问题?
答案 0 :(得分:1)
程序在这一点巧合地失败:它无限期地重复,直到它用完堆栈空间。