常见而又隐秘的比较函数 BUG

原创 2015年07月10日 18:37:25


// Returns 0 if a == b, a negative number if a < b or a positive otherwise.

int cmp(const void *a, const void*b) {
	return *(int *)a  - *(int *)b;  
}


这是一个非常常见地使用在 qsort 等排序里的比较函数,然后这个函数本身却是存在 bug 的 —— 溢出的危险。

FAILURE TEST CASE:

</pre><p></p><pre name="code" class="cpp">int a = INT_MIN, b = 1;  // INT_MIN defined in limits.h
int result = cmp(&a, &b);  // result = INT_MAX, 这显然与 a < b 的事实不符合。

那么正确的写法是怎样的呢:

// Returns 0 if a <= b, or non-zero value otherwise.
int cmp(const void *a, const void*b) {
	return *(int *)a > *(int *)b;
}

据说《程序设计实践》一书有提到,另此书评价甚高,有空可以拜读一下。


版权声明:本文为博主原创文章,未经博主允许不得转载。

最常见的移动App Bug——崩溃的测试用例设计

Cagri Temizyurek是一个软件测试专家,自2003年以来一直担任一名测试人员。   他拥有伊斯坦布尔技术大学工程系的电子与通信硕士学位,还是伊斯坦布尔大学电气电子工程系的博士候选人。 ...
  • pupura
  • pupura
  • 2014年11月12日 11:06
  • 1927

项目中遇到的bug(web前端-持续更新)

项目中遇到的常见bug,及时整理。 input放在a标签里面单机不能获取input的光标(IE环境下)双击才可以获得焦点,目前有的解决方案: 不要给a标签添加href属性; 不要在外面套上a标签。 返...
  • wkyseo
  • wkyseo
  • 2016年04月15日 10:11
  • 2733

C/C++语言经典、实用、趣味程序设计编程百例精解

C/C++语言经典、实用、趣味程序设计编程百例精解(1)  1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线 *问题分析与算法设计 如果在程序中使用数组...
  • Enjoying_Science
  • Enjoying_Science
  • 2014年08月31日 20:37
  • 1882

CSS常见BUG/清除浮动/跨浏览器兼容/函数作用域/闭包

CSS常见BUG/清除浮动/跨浏览器兼容/函数作用域/闭包
  • m0_37851778
  • m0_37851778
  • 2017年08月06日 08:50
  • 207

无奈而又苦逼的二分版本回退法定位新引入的bug!!!

昨天测试人员和开发人员都发现, 某新版本有严重的bug.  群里已经开始嚷嚷了, 但没有谁知道是谁引入的问题。本来呢, 这个问题不应该是由我去定位, 但主管让我帮定位一下, 毕竟时间太紧急, 必须尽快...
  • stpeace
  • stpeace
  • 2015年04月01日 21:35
  • 1148

一个高效通用而又简单易用的客户端表单输入验证类库函数

  • 2008年09月18日 22:00
  • 3KB
  • 下载

那些奇葩而又常见的前端问题(遇到就更新)

1:异步提交表单,总是走进error函数。 ajax请求时datatype参数没指定。估计你服务器返回的是html格式的文本。看你这需求,建议指定为json。然后服务器改为返json格式数据。 da...
  • qianqianyixiao1
  • qianqianyixiao1
  • 2016年10月24日 16:17
  • 368

一个简单而又不影响运行的日志函数

I/O操作比较耗时,在硬盘频繁读写时尤其耗时,比如杀毒软件扫描,磁盘碎片整理,索引服务之类的。如果在运行效率有要求的环境下有大量I/O的话就不得不考虑如何让I/O不影响运行。 I/O操作比如说日志,...
  • soliddream66
  • soliddream66
  • 2011年09月09日 17:32
  • 791

C语言中一些比较基础而又重要的知识

C语言 基础 字符串 查找 截取 前几位 初始化 二维 数组 指针 内存分配 内存拷贝 比特 移位 类型转换 CString TCHAR char LPSTR 输出到文件...
  • JuanA1
  • JuanA1
  • 2011年04月04日 16:33
  • 1301

strtok函数真是个蹩脚而又恶心的设计(千万不要嵌套使用strtok函数)

先来看一个程序: #include #include int main() { char str[] = "a = 1\nb = 2\nc = 3\nd = 4\ne = 5\nf = 6";...
  • stpeace
  • stpeace
  • 2013年11月02日 00:43
  • 4684
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:常见而又隐秘的比较函数 BUG
举报原因:
原因补充:

(最多只允许输入30个字)