这是我的代码,由于某些原因,我不得不使用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++){