这是我的比较函数:
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);
除非我按如下方式修改函数,否则我会得到一个 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 时返回一个未排序的列表! 这是怎么回事?
最佳答案
试试这个:
int a=2;
int b = 2;
compareInts(&a, &b);
您的比较函数接受指针,而不是直接接受整数。 当你传递两个整数时真正发生了什么
compareInts(2,3);
你是在告诉这个函数去分别在内存地址 0x00000002 和 0x00000003 找到你的整数,而这些不是有效地址。
在修改后的函数中,您比较了两个指针 0x00000002 和 0x00000003 的值,但没有尝试取消引用它们,因此它不会崩溃。
关于比较整数函数 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663309/