这是我比较功能:比较整数功能SIGSEGV
int compareInts(const void *a, const void *b) {
const int *pa = (const int*)a;
const int *pb = (const int*)b;
return *pa - *pb;
}
当我通过这个函数整数数组来快速排序一起:
qsort(a, size, sizeof(char*), compareInts);
一切正常,我也得到一个排序列表。但是,如果我尝试使用它自己:
compareInts(2, 2);
,我收到了SIGSEGV,除非我修改的功能如下:
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)'。 – Blastfurnace
'2'不是一个指针,函数需要两个指针。所以它认为'2'是一个指针,并将其视为这样。访问超出过程数据限制的地址2会导致导致seg故障事件的未定义行为。程序的第二个版本是比较指针,而不是指针指向什么。 – user3629249