我的计数排序有seg错误



这是我的代码,由于某些原因,我不得不使用unsigned long。gdb告诉我seg故障。有人能帮我吗?我一个人找不到它。最有趣的是,如果我将类型从unsigned long更改为int,就不会出现seg错误。

代码在这里:

#include <stdio.h>
int counting_Sort (unsigned long ary[], unsigned long array_size,unsigned long max){

    unsigned long counting[max+1];
    unsigned long j;
    for(j=0;j<max+1;j++){
        counting[j]=0;//initize to zero
    }
      unsigned long i;
    for(i=0;i<array_size;i++){
        counting[ary[i]]++;
    }
    unsigned long q;
    for(q=1;q<max+1;q++){
       counting[q]=counting[q-1]+counting[q];
    }
    for(q=0;q<max+1;q++){
       counting[q]=counting[q]-1;
    }
    unsigned long  outputAry[array_size];
    unsigned long  d;
    for(d=(array_size-1); d>=0;d--){
         outputAry[counting[ary[d]]]=ary[d];// SEG FAULT IS HERE
         counting[ary[d]]--;//AND HERE
    }
    unsigned long  m;
    //for(m=0; m<array_size;m++){
      // printf("%lun",outputAry[m]);
   // }
    return 0;
}        


int main(){
    unsigned long  array[7]={2,6,4,0,1,7,9};
    printf("before sorting the order is: n");
    unsigned long  i;
    for(i=0;i<7;i++){
        printf("%lun",array[i]);
    }
    printf("after sorting, the new order is: n");
    counting_Sort(array,7,9);

    getchar();
    return 0;
}

你已经找到了地方,只是没有找到原因。

unsigned long  d;
for(d=(array_size-1); d>=0;d--){

d是一个无符号整数,这意味着d>=0始终为真。循环永远不会结束,这就是分段错误的原因。

一种方法是将d更改为烧录类型:

int d;

但如果这不是您想要的,请将for循环更改为:

for (d = 0; d <= array_size - 1; d++){

相关内容

  • 没有找到相关文章

最新更新