【问题标题】:qsort Filling Array With Zeroes? [closed]qsort用零填充数组? [关闭]
【发布时间】:2018-04-29 08:48:39
【问题描述】:

我正在尝试对一组无符号长整数进行排序。但是,由于某种原因,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;
      }
}

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

【问题讨论】:

  • 请不要发布代码图片,而是将实际代码作为文本发布。图片不允许帖子出现在搜索中。另外,请确保它是正确的minimal reproducible example,而不仅仅是可能无法重现问题的零碎。
  • 我也严重怀疑你这是一个 C 和 C++ 的问题。您肯定只是作为其中之一进行编译。
  • 除非scores[c]charunsigned 的数组,否则sizeof scores[c] 不会给出要排序的元素数。为什么你使用scores[c] 作为第一个参数而不是scores??

标签: c sorting qsort


【解决方案1】:

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

您可能会获得大量超出范围的访问,而这些访问恰好是零。

【讨论】:

  • 非常感谢!我以为 qsort 包含了总数组大小和元素大小,结果它包含了元素数量和元素大小。
猜你喜欢
  • 1970-01-01
  • 2021-08-07
  • 2017-10-24
  • 2016-11-06
  • 2021-11-25
  • 2018-10-05
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多