qsort 用零填充数组?

qsort Filling Array With Zeroes?

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

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

调用如下:

qsort(scores[c], sizeof(scores[c]), sizeof(scores[c][0]), 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;
      }
}

是什么原因造成的,我该怎么办?

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

您可能会遇到很多恰好拾取零的超出范围的访问。