快好知 kuaihz

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

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

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

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

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

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

第一步:A = null;

第二步:A doSomething;

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

if(A != null)

A doSomthing;

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

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:知道空指针,你也能改bug了  指针  指针词条  知道  知道词条  bug  bug词条  
产品

 Axure产品原型在手机上如何运...

增哥导读:在一般的开发工作之前,我们通常会设计产品原型,大部分为axure绘制的线框图作为产品的PRD文档,供UI和开发进行前期工作,但是有的时候客户、领导想在...(展开)

产品

 中国互联网公司人效榜

你为你的公司贡献了多少收入、多少利润?前几天,腾讯科技一篇报道,揭示苹果人均净利润高达45.18万美元,谷歌的人均净利润也有24.2万美元,分列第一、二名。如果...(展开)