gpt4 book ai didi

比较整数函数 SIGSEGV

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:41 26 4
gpt4 key购买 nike

这是我的比较函数:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com