C qsort用零填充数组?
我正在尝试对一个无符号长数组进行排序。然而,出于某种原因,qsort用零填充整个数组,而不是对其进行排序。我将显示对函数、比较器和GDB的调用 此图显示了qsort前后的数组,以及我对该函数的调用 这是电话:C qsort用零填充数组?,c,sorting,qsort,C,Sorting,Qsort,我正在尝试对一个无符号长数组进行排序。然而,出于某种原因,qsort用零填充整个数组,而不是对其进行排序。我将显示对函数、比较器和GDB的调用 此图显示了qsort前后的数组,以及我对该函数的调用 这是电话: qsort(scores[c], sizeof(scores[c]), sizeof(scores[c][0]), comparator); 这是我的比较器函数,名为comparator: int comparator(const void *p, const void *q) {
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;
}
}
int比较器(const void*p,const void*q)
{
如果(*(无符号长*)p)<*((无符号长*)q)){
返回-1;
}
else如果(*(无符号长*)p)==*((无符号长*)q)){
返回0;
}
否则{
返回1;
}
}
这是什么原因造成的?我能做些什么?参数sizeof(scores[c])
给出了以字节为单位的大小,而不是要排序的元素数
您可能会得到很多超出范围的访问,而这些访问恰好拾取了零。请不要发布代码的图片,而是将实际代码作为文本发布。图像不允许帖子出现在搜索中。另外,确保它是一个适当的,而不是只是一些碎片和可能不会重现的问题。我也严重怀疑你这是一个C和C++问题。除非
scores[c]
是char
或unsigned
的数组,否则sizeof scores[c]
不会给出要排序的元素数。您为什么要使用分数[c]
作为第一个参数,而不是分数
?非常感谢!我以为qsort计算了总数组大小和元素大小,结果是计算了元素计数和元素大小。