Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >整数函数SIGSEGV的比较

整数函数SIGSEGV的比较
EN

Stack Overflow用户
提问于 2014-12-26 16:27:08
回答 2查看 135关注 0票数 1

这是我的比较功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int compareInts(const void *a, const void *b) {
    const int *pa = (const int*)a;
    const int *pb = (const int*)b;
    return *pa - *pb;
}

当我将这个函数与一个整数数组一起传递给qsort时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
qsort(a, size, sizeof(char*), compareInts);

一切都很好,我得到了一个排序的列表。然而,如果我试图亲自使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compareInts(2, 2);

我得到一个SIGSEGV,除非我修改如下的功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int compareInts(const void *a, const void *b) {
    const int *pa = (const int*)a;
    const int *pb = (const int*)b;
    return pa - pb;
}

当我调用它时,它工作得很好,但是当传递给qsort时,它会返回一个未排序的列表!这里发生了什么事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-26 16:30:32

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int a=2;
int b = 2;
compareInts(&a, &b);

您的比较函数接受指针,而不是直接接受整数。当您将两个整数传递到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compareInts(2,3);

你告诉这个函数分别在内存地址0x00000002和0x00000003找到你的整数,这些都是无效地址。

在修改后的函数中,可以比较0x00000002和0x00000003两个指针的值,而不试图取消它们的引用,这样它就不会崩溃。

票数 2
EN

Stack Overflow用户

发布于 2014-12-26 16:34:24

使用此代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compareInts(2, 2);

您正在尝试将内存位置2与内存位置2进行比较。这将给您一个段冲突,仅仅是因为您无法访问内存位置2。您并不试图比较位于您可以访问的内存地址上的两个值--在操作系统意识到您无法访问这些位置之前,您甚至无法达到此点(并给您一个大的SEGV感谢-您-尝试)。您需要比较实际访问的内存地址的内容。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  int a = 2;   // a is an integer variable, you can take the address of this
  int b = 2;   // ibid

  compareInts(&a, &b);  // now, you are giving your function *the addresses of* a and b
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27663309

复制
相关文章
Android入门教程 | EditText 用户输入
使用EditText时,有时候我们会需要监听输入的回车,以做出一些操作。 或者需要把回车变成“搜索”,“发送”或“完成”等等。
Android_anzi
2021/11/05
8390
Android 实现EditText输入金额
Android中EditText是一个InputType类型有很多的控件,可以来达到不同的软键盘效果。如下图:
网罗开发
2021/01/29
3.1K0
Android 实现EditText输入金额
Android edittext InputFilter 输入控制
InputFilter 可能需要对用户的输入进行一些限制,可以为EditText Widget设置一个InputFilter以实现这一功能
程思扬
2022/01/10
7350
EditText输入密码的显示和隐藏
密码的显示和隐藏是一个很常见的小知识点,主要包括2个部分:小图标的变化和EditText输入密码的显示和隐藏
AntDream
2019/07/15
2.5K0
jQuery实现用户输入自动完成功能
利用jQuery UI中Auto-complete插件实现输入自动完成功能,大家在使用诸如淘宝、京东等电商平台搜索商品时,往往只要输入商品的一些特殊字符,就可以显示出和该字符相近的列表菜单,用户使用鼠标或者键盘方向键就可以快速选择,实现了很好的用户体验。
Sindsun
2019/12/10
1.6K0
jQuery实现用户输入自动完成功能
android开发(十六) 如何限制 EditText 最大输入字符数
//editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20
Java架构师必看
2021/05/27
1.2K0
mysql 如何修改用户密码_MySQL如何更改用户密码
2、正在更改密码的用户正在使用该应用程序,因为如果在不更改应用程序的连接字符串的情况下更改密码,则应用程序将无法连接到数据库服务器。
全栈程序员站长
2022/09/07
4.7K0
问与答121:如何让用户输入密码后才能使用Excel文件?
Q:有没有一种方法可以通过给用户提供密码来许可用户使用Excel文件?例如,在没有到规定的日期之前,可以正常使用,超过规定日期,则需要输入密码,如果密码不正确,将删除Excel文件。
fanjy
2021/05/07
1.2K0
详解EditText输入监听TextWatcher「建议收藏」
日常开发中,我们可能会遇到需要监听EditText输入,比如判断输入是否为电话号码,获取输入的数据长度来限定字数等。这就需要监听EditText的输入状态。EditText使用TextWatcher实现类似按钮监听事件:
全栈程序员站长
2022/07/31
3.1K0
详解EditText输入监听TextWatcher「建议收藏」
Android开发之输入框EditText介绍
这篇文章主要为大家详细介绍了Android布局之输入框EditText设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
wangweijun
2020/02/13
2.1K0
如何在Linux中更改用户ID?
在Linux系统中,每个用户都有一个唯一的用户ID(User ID),用于标识和管理用户的权限和资源访问。有时候,我们需要更改用户ID,可能是为了解决冲突、重组用户组或其他管理需求。本文将详细介绍如何在Linux中更改用户ID的几种方法。
网络技术联盟站
2023/06/08
8.5K0
如何在Linux中更改用户ID?
用户输入
大多数程序都在解决最终用户问题,为此通常需要从用户那里获取一些信息。在程序需要一个名字时,你需要提示用户输入该名字;程序需要一个名字时,你需要提示用户输入一系列名字。
狼啸风云
2019/01/18
9710
点击加载更多

相似问题

Android:用户完成编辑后评估EditText

43

用户输入后的EditText事件生成

43

如何在动画完成后更改QGraphicsPixmapItem的可见性?

13

如何检测用户何时完成在EditText中输入RecyclerView值?

11

EditText:检测用户输入更改与加载数据更改

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文