码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-07-06 11:21:13      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:char   UI   地址   ...   项目   过滤   作用   logs   访问   

先看段代码:

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

标签:char   UI   地址   ...   项目   过滤   作用   logs   访问   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!