整数声明上的分段错误

时间:2015-02-16 21:44:10

标签: c

我使用此代码获得了分段错误:

#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]);
    }
}

我不确定为什么它会在那个地方发生分裂。任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

程序在这一点巧合地失败:它无限期地重复,直到它用完堆栈空间。