数组越界真可怕,莫名就闯到了别人家

  作者:天雷君 时间:2018-11-30来源:电子产品世界

“悄悄是别离的笙箫,沉默是今晚的康桥。悄悄的我走了,正如我悄悄的来;我挥一挥衣袖,不带走一片云彩。”情圣徐志摩的这首《再别康桥》脍炙人口,当年传遍大江南北,撩动了无数少女的芳心。民国才女林徽因经受住了徐志摩诸多情诗的狂轰滥炸,与梁家大公子思成君喜结连理,一对金童玉女完美结合,双双投身建筑事业,为中国古建筑的保护和传承留下了不可磨灭的功勋。

1543555630791693.jpg

  相较之下,头顶民国四大美女之一光环的陆小曼就没有那般矜持了,贪恋美色的志摩君在一股股不能自抑的荷尔蒙的冲击下,将发妻、老父和家庭伦理置于脑后,将社会舆论、闲言碎语视若浮云,对国色天香的陆小曼狂轰乱炸,在那甜到心里、酥到骨里的情诗的几番引逗之下,嫁做人妇的陆小曼出了轨,越了界,离了婚,和志摩君各取所需、“相亲相爱”地结合在了一起。只是,“王子和公主并没有永远幸福地生活在一起”,为了满足陆小曼纸醉金迷、骄奢淫逸的生活,徐志摩拖着肾亏的身体四处走穴讲课,一代才子竟最终死于空难,客死他乡。

  不知道,这是不是“青年导师”俞敏洪先生口中所谓的“女子堕落导致家庭堕落”的经典案例呢?

  看来,“越界”真的没有好下场,破坏了两个家庭不说,最终自己也搞到家破人亡。天圆地方、大道以常,不只是爱情、婚姻的“越界”会遭到天谴,搞嵌入式写代码的,遇到“数组越界”也会被搞得栖栖遑遑。

  1

  我一直觉得,程序员就是一个多疑到有些神经兮兮的群体,每每出了bug,便怀疑起天,怀疑起地,怀疑起赖以生存的空气。这不,天雷君又开始作了,对着一个bug,竟然无端地怀疑起1+1不等于2起来了。

1543555662632882.jpg

  照例,洒家先不惜笔墨,把这个bug放在实际应用背景和程序中简单描述一番。

  笔者这款产品带有遥控功能,接收到遥控器发送的遥控报文后,从中提取出相应的命令数据,根据命令执行相关操作。程序的第一步就是接收遥控报文中的数据场中的数据位流,把这些数据位按照每八位组合成一个字节的方式,提取出字节形式的数据。

  通过巧妙地设计遥控报文的格式,程序可以检测出“报文数据场”的第一个数据位,然后依序将每八个数据位存储到一个字节形式的数组成员中,统计到固定的数据位长度后,“报文数据场”检测结束,之后便是对数据进行解密、解析的事情了。

  显然,这里的数据位长度是8的倍数,在这个遥控报文中,数据位的个数是288,数据长度为288/8=36个字节,字节形式的数据数组定义为Rx_rawbit[36]。在程序里,数据位的长度以一个16位的变量Rf_bit_count表示,接收到一位数据位,将Rf_bit_count加一,Rf_bit_coun加到288,就说明接收完了所有的数据位。

  上述Rx_rawbit数组成员为Rx_rawbit[0]- Rx_rawbit[35],数组下标从0开始,数据位的一般表示方法为0-7位,显然,第一个数据位存放在第0个字节的第0位,第二个数据位存放在第0个字节的第1位,。。。,第九个数据位存放在第1个字节的第0位,。。。,

  以此类推,第n+1个数据位存放在第(n>>3)个字节的第(n & 0x07)位。

  2

  正经八百的解释到此基本结束,洒家不由得想起了《末代皇帝》里的经典画面,三岁的溥仪被接入皇宫,举行登基大典,小宣统被乌压压的场面烦躁地不行,眼看着就要大哭起来,他的父亲-当时的摄政王不停地安慰他,‘快完了,快完了!’我想告诉各位看官的是,我的描述还差一点点,‘快完了!’

  还记得那个“把大象放进冰箱分为几步?”的经典笑话吗?做为一名优秀的“唠嗑钟点工”,丹丹大妈给出的答案是两步,第一步,打开冰箱,第二步,把大象放到冰箱里。虽说是典型的脑筋急转弯,但是蕴含着深刻的智慧。

1543555699728751.jpg

  洒家借花献佛,也把这里存放数据位的操作分为两步。


1 2 3

关键词: 数组

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版