qsort用零填充数组?

时间:2018-04-29 08:48:40

标签: c sorting qsort

我正在尝试对无符号长整数进行排序。但是,由于某种原因,qsort用零填充整个数组而不是对它进行排序。我将展示我对函数,比较器和GDB的调用。

此图显示了qsort之前和之后的数组,以及我对函数的调用。

GDB

这是电话:

qsort(scores[c], sizeof(scores[c]), sizeof(scores[c][0]), comparator);

这是我的比较器函数,名为comparator:

int comparator(const void *p, const void *q)
{
      if( *((unsigned long *)p) < *((unsigned long *)q)){
          return -1;
      }
      else if( *((unsigned long *)p) == *((unsigned long *)q)){
          return 0;
      }
      else{
          return 1;
      }
}

是什么导致了这一点,我该怎么办呢?

1 个答案:

答案 0 :(得分:5)

qsort参数sizeof(scores[c])给出大小(以字节为单位),而不是要排序的元素数。

你可能会获得许多超出范围的访问,这些访问恰好会获得零。