首页 > 其他 > 详细

一个由有符号下标引起的bug

时间:2017-07-06 10:59:40      阅读:173      评论:0      收藏:0      [点我收藏+]

先看段代码:

if(s[d[i]])
{
...
}

这里的d是一个char*的内存buffer,s是一个256长度的bool数组。上段代码逻辑是,s已进行过初始化,其作用是过滤字节,有些字节对应true,有些字节对应false。明显,d[i]有256种可能。上面的逻辑正确么?

上面的代码其实就是我项目里的一段代码,看似没有问题,实际上有个潜伏的bug。d[i]是有符号的,换句话说,d[i]可能为负。

项目里d[i]有一次等于0xc4,这个时候s访问越界了。因为d[i]为负,s[d[i]]往内存上游(也就是比s首地址更小的方向)访问内存,结果随机。

正确的代码应该是这样:s[(uint8_t)d[i]]。

一个由有符号下标引起的bug

原文:http://www.cnblogs.com/jiu0821/p/7125190.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!