百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

知道空指针,你也能改bug了_空指针怎么定义

haoteby 2025-02-21 13:27 102 浏览

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。

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

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

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

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

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

第一步:A = null;

第二步:A doSomething;

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

if(A != null)

A doSomthing;

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

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

#专栏作家#

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

相关推荐

如何为MySQL服务器和客户机启用SSL?

用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...

OpenVPN客户端配置_openvpn客户端配置文件解析

...

k8s 证书问题排查_k8s dashboard 证书

从去年开始一些老项目上陆陆续续出现一些列的证书问题,(证书原理这里就不说了,官方文档一堆)多数刚开始的表现就是节点的kubelet服务起不来,节点状态NotReady表现日志如下failed...

企业级网络互通方案:云端OpenVPN+爱快路由器+Win11互联实战

企业级网络互通方案:OpenVPN搭建公有云+爱快路由器+Win11三地互联实战指南「安全高效」三地局域网秒变局域网实施环境说明...

OpenV** Server/Client配置文件详解

Server配置详解...

接口基础认知:关键信息与合规前提

1.核心技术参数(必记)...

S交换机通过SSH登录设备配置示例(RADIUS认证+本地认证独立)

说明:●本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。●通过不同的管理域来实现RADIUS认证与本地认证两种方式同时使用,两...

SSL证书如何去除私钥密码保护_ssl证书怎么取消

有时候我们在生成证书的时候可以加入了密码保护。然后申请到证书安装到了web服务器。但是这样可能会带来麻烦。每次重启apache或者nginx的时候,都需要输入密码。那么SSL证书如何去除私钥密码保护。...

SSL证书基础知识与自签名证书生成指南

一、证书文件类型解析...

S交换机通过SSH登录设备配置示例(RADIUS认证)

说明:本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。假设已在RADIUS服务器上创建了用户名yc123,密码test#123。对...

HTTPS是什么?加密原理和证书。SSL/TLS握手过程

秘钥的产生过程非对称加密...

HTTPS TLS握手流程_进行tls握手

1.客户端向服务器发送`ClientHello`消息,包括支持的TLS版本、加密套件、随机数等信息。2.服务器收到`ClientHello`消息后,解析其中的信息,并根据配置选择一个加密套件。3....

Spring Boot 单点登录(SSO)实现_spring boot 单点登录jwt

SpringBoot单点登录(SSO)实现全指南单点登录(SingleSign-On,SSO)是一种身份验证机制,允许用户使用一组凭证登录多个相关但独立的系统。在微服务架构和企业级系统中,SS...

源码分享:在pdf上加盖电子签章_pdf如何加盖电子公章

在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...

微信支付商户API证书到期 怎么更换

微信支付商户API证书到期更换是一个非常重要的操作,需要仔细按照流程进行。如果证书过期,所有通过API的支付、退款等操作都会失败,将直接影响您的业务。请按照以下详细步骤进行操作:重要前提:分清...