【发布时间】:2014-12-27 00:27:08
【问题描述】:
这是我的比较函数:
int compareInts(const void *a, const void *b) {
const int *pa = (const int*)a;
const int *pb = (const int*)b;
return *pa - *pb;
}
当我将此函数与整数数组一起传递给 qsort 时:
qsort(a, size, sizeof(char*), compareInts);
一切正常,我得到一个排序列表。但是,如果我自己尝试使用它:
compareInts(2, 2);
除非我修改函数如下:
int compareInts(const void *a, const void *b) {
const int *pa = (const int*)a;
const int *pb = (const int*)b;
return pa - pb;
}
当我调用它时效果很好,但是当传递给 qsort 时会返回一个未排序的列表! 这是怎么回事?
【问题讨论】:
-
qsort()的第三个参数是每个元素的大小。如果您实际上是在对int的数组进行排序,那么第三个参数应该是sizeof(int)或者可能是sizeof(*a)。 -
'2' 不是指针,该函数需要两个指针。所以它认为'2'是一个指针并将其视为指针。访问超出进程数据限制的地址 2 会导致未定义的行为,从而导致段错误事件。该程序的第二个版本是比较指针,而不是指针指向的内容。
标签: c function integer compare qsort