數組越界真可怕,莫名就闖到了別人家
“悄悄是別離的笙簫,沉默是今晚的康橋。悄悄的我走了,正如我悄悄的來(lái);我揮一揮衣袖,不帶走一片云彩?!鼻槭バ熘灸Φ倪@首《再別康橋》膾炙人口,當年傳遍大江南北,撩動(dòng)了無(wú)數少女的芳心。民國才女林徽因經(jīng)受住了徐志摩諸多情詩(shī)的狂轟濫炸,與梁家大公子思成君喜結連理,一對金童玉女完美結合,雙雙投身建筑事業(yè),為中國古建筑的保護和傳承留下了不可磨滅的功勛。
本文引用地址:http://dyxdggzs.com/article/201811/395096.htm相較之下,頭頂民國四大美女之一光環(huán)的陸小曼就沒(méi)有那般矜持了,貪戀美色的志摩君在一股股不能自抑的荷爾蒙的沖擊下,將發(fā)妻、老父和家庭倫理置于腦后,將社會(huì )輿論、閑言碎語(yǔ)視若浮云,對國色天香的陸小曼狂轟亂炸,在那甜到心里、酥到骨里的情詩(shī)的幾番引逗之下,嫁做人婦的陸小曼出了軌,越了界,離了婚,和志摩君各取所需、“相親相愛(ài)”地結合在了一起。只是,“王子和公主并沒(méi)有永遠幸福地生活在一起”,為了滿(mǎn)足陸小曼紙醉金迷、驕奢淫逸的生活,徐志摩拖著(zhù)腎虧的身體四處走穴講課,一代才子竟最終死于空難,客死他鄉。
不知道,這是不是“青年導師”俞敏洪先生口中所謂的“女子墮落導致家庭墮落”的經(jīng)典案例呢?
看來(lái),“越界”真的沒(méi)有好下場(chǎng),破壞了兩個(gè)家庭不說(shuō),最終自己也搞到家破人亡。天圓地方、大道以常,不只是愛(ài)情、婚姻的“越界”會(huì )遭到天譴,搞嵌入式寫(xiě)代碼的,遇到“數組越界”也會(huì )被搞得棲棲遑遑。
1
我一直覺(jué)得,程序員就是一個(gè)多疑到有些神經(jīng)兮兮的群體,每每出了bug,便懷疑起天,懷疑起地,懷疑起賴(lài)以生存的空氣。這不,天雷君又開(kāi)始作了,對著(zhù)一個(gè)bug,竟然無(wú)端地懷疑起1+1不等于2起來(lái)了。
照例,灑家先不惜筆墨,把這個(gè)bug放在實(shí)際應用背景和程序中簡(jiǎn)單描述一番。
筆者這款產(chǎn)品帶有遙控功能,接收到遙控器發(fā)送的遙控報文后,從中提取出相應的命令數據,根據命令執行相關(guān)操作。程序的第一步就是接收遙控報文中的數據場(chǎng)中的數據位流,把這些數據位按照每八位組合成一個(gè)字節的方式,提取出字節形式的數據。
通過(guò)巧妙地設計遙控報文的格式,程序可以檢測出“報文數據場(chǎng)”的第一個(gè)數據位,然后依序將每八個(gè)數據位存儲到一個(gè)字節形式的數組成員中,統計到固定的數據位長(cháng)度后,“報文數據場(chǎng)”檢測結束,之后便是對數據進(jìn)行解密、解析的事情了。
顯然,這里的數據位長(cháng)度是8的倍數,在這個(gè)遙控報文中,數據位的個(gè)數是288,數據長(cháng)度為288/8=36個(gè)字節,字節形式的數據數組定義為Rx_rawbit[36]。在程序里,數據位的長(cháng)度以一個(gè)16位的變量Rf_bit_count表示,接收到一位數據位,將Rf_bit_count加一,Rf_bit_coun加到288,就說(shuō)明接收完了所有的數據位。
上述Rx_rawbit數組成員為Rx_rawbit[0]- Rx_rawbit[35],數組下標從0開(kāi)始,數據位的一般表示方法為0-7位,顯然,第一個(gè)數據位存放在第0個(gè)字節的第0位,第二個(gè)數據位存放在第0個(gè)字節的第1位,。。。,第九個(gè)數據位存放在第1個(gè)字節的第0位,。。。,
以此類(lèi)推,第n+1個(gè)數據位存放在第(n>>3)個(gè)字節的第(n & 0x07)位。
2
正經(jīng)八百的解釋到此基本結束,灑家不由得想起了《末代皇帝》里的經(jīng)典畫(huà)面,三歲的溥儀被接入皇宮,舉行登基大典,小宣統被烏壓壓的場(chǎng)面煩躁地不行,眼看著(zhù)就要大哭起來(lái),他的父親-當時(shí)的攝政王不停地安慰他,‘快完了,快完了!’我想告訴各位看官的是,我的描述還差一點(diǎn)點(diǎn),‘快完了!’
還記得那個(gè)“把大象放進(jìn)冰箱分為幾步?”的經(jīng)典笑話(huà)嗎?做為一名優(yōu)秀的“嘮嗑鐘點(diǎn)工”,丹丹大媽給出的答案是兩步,第一步,打開(kāi)冰箱,第二步,把大象放到冰箱里。雖說(shuō)是典型的腦筋急轉彎,但是蘊含著(zhù)深刻的智慧。
灑家借花獻佛,也把這里存放數據位的操作分為兩步。
評論