比较整数函数 SIGSEGV

标签 c function integer compare qsort

这是我的比较函数:

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/

相关文章:

c - 查找 8 位数字的数字总和的有效方法

c++ - 如何随机化开关?

python - 你能覆盖一个由函数结果定义的变量而不先在 python 中清除吗?

c# - 在 C# 中是否有等效于 JavaScript parseInt 的东西?

java - 将整数列表转换为单词

c++ - 一种类型的十进制表示的长度的近似值

ios - 在 iOS 的 .c 文件中读取 .txt 文件

c - stdin 的 fscanf 不提示输入

c - 使用 C 中的指针将二维数组中的行传递给函数

c++ - 将整数转换为数组