知道空指针,你也能改bug了

起点学院产品经理365成长计划,2天线下闭门集训+1年在线学习,全面掌握BAT产品经理体系。了解详情

“靠,又crash了,这有个空指针!”,想必产品经理到程序猿堆里转悠的时候经常听到这句话吧。这空指针呢是咱程序猿踏上写bug的不归路上的第一步,程序猿对它可是又爱又恨。为啥这样说呢?别急,我们先来了解下什么是指针。

bug

我们知道,程序是运行在内存中的,内存就像一个规划很好的,各种建筑非常整齐的一排排街道,每间房屋都有一个门牌号来表示自己的地址,为了方便管理,只允许一间房子住一个人。当我领着一帮人来到自己管辖的街道,而且要把他们安顿到各个房子时,为了后面我能够准确的找到他们,在每人进入房子时,我会在他门口竖了箭头牌子指向这个房子,牌子上写上他们各自的名字,“张三”,“李四”……

有人会说,你记门牌号啊,呃,计算机世界的门牌号可不是那么简单的哦,它是这个样子的0x3ac68b2f,当然,这只是其中之一,记这种东西是计算机擅长的,不是人类擅长的,逼人类理解这种东西就如同逼计算机理解什么叫做“爱”一样。简单点说,指向房子的箭头牌子就是的指针,而牌子上的词儿就是指针的名字,牌子指向的房子就是内存的地址,房子里面的人就是我们程序运算需要的数据,这样我们就能够很容易的通过指针得到和操作内存中的数据了。

再来说说什么是空指针,我们可以先意会一下,指向空的指针呗。然而空是一种极度抽象的概念,这个世界哪有“空”呢,我立一块箭头牌子,总得把它指向某个地址,既然没法指向真正的“空”,那我们就脑补出来一个呗,在内存中我们规定出一个地址,这个地址来代表“空”(无辜的“空”又被代表了),既然是脑补出来的,那就没有明确的统一规定了,不同的系统可以指向不同的地址,不过一般情况下,会指向0地址,访问它都是非法的,我们可以想象0地址住了一个暴躁的老头,凡是想访问他的人都会被他扇耳光。有趣的是,程序猿们被扇了一边又一边,仍然乐此不疲,被打脸的程序猿手拉手可以绕地球好几圈。

好了,上面说的空指针听起来好像很厉害的样子,实际上写一个空指针的bug只要两步:

第一步:A = null;

第二步:A doSomething;

怎么改呢?不负责任的讲,把第二步改成

if(A != null)

A doSomthing;

你可能会想,这尼玛都能犯错,唉,毕竟这是简化版的嘛,bug写成这样就太丢程序猿的脸了,如何将第一步在茫茫代码海洋中巧妙地隐藏起来,是可以体现一个程序猿写bug水准的。

不过改起来也很简单啊,所以程序猿们可喜欢改空指针的bug了。可是你要问这样改就对了吗,我只能回答这样改没错。

#专栏作家#

给产品经理讲技术,微信公众号(pm_teacher),人人都是产品经理专栏作家。资深程序猿,专注客户端开发若干年,对前端、后台技术略懂,热衷于对新的科技领域的探索。

本文原创发布于人人都是产品经理,未经许可,不得转载。

您的赞赏,是对我创作的最大鼓励。

评论( 1

登录后参与评论
  1. if(A != null)

    A doSomthing;

    嗯 doSomthing

    回复
加载中