知道空指針,你也能改bug了
“靠,又crash了,這有個空指針!”,想必產品經理到程序猿堆里轉悠的時候經常聽到這句話吧。這空指針呢是咱程序猿踏上寫bug的不歸路上的第一步,程序猿對它可是又愛又恨。為啥這樣說呢?別急,我們先來了解下什么是指針。
我們知道,程序是運行在內存中的,內存就像一個規劃很好的,各種建筑非常整齊的一排排街道,每間房屋都有一個門牌號來表示自己的地址,為了方便管理,只允許一間房子住一個人。當我領著一幫人來到自己管轄的街道,而且要把他們安頓到各個房子時,為了后面我能夠準確的找到他們,在每人進入房子時,我會在他門口豎了箭頭牌子指向這個房子,牌子上寫上他們各自的名字,“張三”,“李四”……
有人會說,你記門牌號啊,呃,計算機世界的門牌號可不是那么簡單的哦,它是這個樣子的0x3ac68b2f,當然,這只是其中之一,記這種東西是計算機擅長的,不是人類擅長的,逼人類理解這種東西就如同逼計算機理解什么叫做“愛”一樣。簡單點說,指向房子的箭頭牌子就是的指針,而牌子上的詞兒就是指針的名字,牌子指向的房子就是內存的地址,房子里面的人就是我們程序運算需要的數據,這樣我們就能夠很容易的通過指針得到和操作內存中的數據了。
再來說說什么是空指針,我們可以先意會一下,指向空的指針唄。然而空是一種極度抽象的概念,這個世界哪有“空”呢,我立一塊箭頭牌子,總得把它指向某個地址,既然沒法指向真正的“空”,那我們就腦補出來一個唄,在內存中我們規定出一個地址,這個地址來代表“空”(無辜的“空”又被代表了),既然是腦補出來的,那就沒有明確的統一規定了,不同的系統可以指向不同的地址,不過一般情況下,會指向0地址,訪問它都是非法的,我們可以想象0地址住了一個暴躁的老頭,凡是想訪問他的人都會被他扇耳光。有趣的是,程序猿們被扇了一邊又一邊,仍然樂此不疲,被打臉的程序猿手拉手可以繞地球好幾圈。
好了,上面說的空指針聽起來好像很厲害的樣子,實際上寫一個空指針的bug只要兩步:
第一步:A = null;
第二步:A doSomething;
怎么改呢?不負責任的講,把第二步改成
if(A != null)
A doSomthing;
你可能會想,這尼瑪都能犯錯,唉,畢竟這是簡化版的嘛,bug寫成這樣就太丟程序猿的臉了,如何將第一步在茫茫代碼海洋中巧妙地隱藏起來,是可以體現一個程序猿寫bug水準的。
不過改起來也很簡單啊,所以程序猿們可喜歡改空指針的bug了。可是你要問這樣改就對了嗎,我只能回答這樣改沒錯。
#專欄作家#
給產品經理講技術,微信公眾號(pm_teacher),人人都是產品經理專欄作家。資深程序猿,專注客戶端開發若干年,對前端、后臺技術略懂,熱衷于對新的科技領域的探索。
本文原創發布于人人都是產品經理,未經許可,不得轉載。
if(A != null)
A doSomthing;
嗯 doSomthing