注册 登录
查看: 456|回复: 11

常见错误/潜在代码分析

[复制链接]
发表于 2014-11-4 21:58:19 | 显示全部楼层 |阅读模式
大家阅读一下这段代码,这代码是很常见的,它有什么错误和或潜在危害?

  1. ... ...
  2. ... ...
  3. short int len = 0;
  4. ... ...
  5. while(len< MAX_LEN) {
  6.     len += read(fd, buf);
  7.     buf += len;
  8. }


回复

使用道具 举报

 楼主| 发表于 2014-11-4 22:31:12 | 显示全部楼层
这个等大家去思考,很常见的问题。
回复 支持 反对

使用道具 举报

发表于 2014-11-5 09:04:22 | 显示全部楼层
上面的while循环代码有可能会造成整型溢出,len是个有符号的整型short int  16bits(范围是-32768 到 32767),

可能溢出会变成负数,导致不断地死循环。似乎在哪见过呀当然也可能是山外哥挖好的大坑
回复 支持 反对

使用道具 举报

发表于 2014-11-5 16:23:44 | 显示全部楼层
len可能会超出定义范围。
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-5 17:32:10 | 显示全部楼层
gsc617 发表于 2014-11-5 09:04
上面的while循环代码有可能会造成整型溢出,len是个有符号的整型short int  16bits(范围是-32768 到 327 ...

没坑啊,答对了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-5 17:33:18 | 显示全部楼层
♂荻夜 发表于 2014-11-5 16:23
len可能会超出定义范围。

MAX_LEN 有可能大于 16位
回复 支持 反对

使用道具 举报

发表于 2014-11-5 18:02:47 | 显示全部楼层

耶,我好像两个月前见过这题

假如你不提示有错误或者潜在危险我估计我本能不会认为这代码有错的

回复 支持 反对

使用道具 举报

发表于 2016-5-8 09:21:55 | 显示全部楼层
范围太小
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2016-5-8 09:22:41 | 显示全部楼层
就两个字节,256
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2016-5-8 23:34:06 | 显示全部楼层
B。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2016-5-12 11:47:55 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-12 11:55:02 | 显示全部楼层
小乖 发表于 2016-5-8 09:22
就两个字节,256

2个字节是 65535,又因为是有符号的,所以除以2
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部