1 / 16
文档名称:

软件编程低级错误:空指针.ppt

格式:ppt   大小:357KB   页数:16页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

软件编程低级错误:空指针.ppt

上传人:相惜 2020/10/20 文件大小:357 KB

下载得到文件列表

软件编程低级错误:空指针.ppt

相关文档

文档介绍

文档介绍:PSST系统工程部C语言软件编程规范工作组公司常见软件编程低级错误:空指针2020/10/20前言这套材料作为编程规范的辅助材料,帮助大家理解编程规范背后的原理。C和C++语言是我司的主流编程语言,然而C/C++具有很多强大的语言特性,从而导致C/C++非常复杂,使得代码更容易出现BUG、难以阅读和维护。业界知名的编程规范都对C/C++容易出现问题的语言特性进行管理。例如MISRA(汽车工业软件可靠性联合会)制定的1998版的MISRAC规范指出,一些在C看来可以接受,却存在隐患的地方有127处之多。2004版的MISRAC规范将针对C语言的规则增加到了141条。对于程序员来说,能工作的代码并不等于“好”代码。“好”代码的指标很多,包括可读性、可维护性、可移植性和可靠性等。出现网上问题的代码,大多数是不良编程****惯引起的。不遵守编程规范的代码,往往也是最不可靠的代码。本胶片收集了常见的空指针案例,给出了相应的纠正措施。申请内存没有捕获异常【问题描述】Web服务器返回500错误。【问题定位】New内存失败,不会返回NULL,而会抛出异常,但代码中没有捕获这个异常【根本原因】C++语言中New内存失败后可以出现两种情况,一种是返回NULL,一种是抛出异常。可以在调用New函数时使用参数指定,也可以在编译选项中统一选择一种处理方式。项目组没有明确规定采用哪种处理方式,开发人员根据以前项目组的经验调用New函数后,判断是否非空,但在这个项目中即使New失败也不会返回NULL。【举一反三】项目组必须规定统一的编程规范。维护老代码时,注意弄清楚老代码的设计和编程的规则。没有判断全局指针非空【问题描述】当主控板起来但接口板还没有起来时,使用命令undorule-map删除所有的Rule-map,出现DA异常。【问题定位】在删除Rule-map时,如果它引用了Link-group,则将Link-group中的pLink的引用计数减一。开发人员认为全局变量pLink永远不可能为NULL,所以没有判断其合法性。正常情况下,pLink确实不可能为NULL,但当系统重启时,先恢复了Rule-map,在恢复Link-group之前,pLink指针为NULL。此时如果从命令行删除所有的Rule-map,就会出现DA异常。【纠正措施】访问pLink之前,判断其是否为NULL【根本原因】多个模块相互配合时,可能出现千奇百怪的调用顺序,开发人员认为永远不可能为NULL的参数,实际网络中却很可能发生。【举一反三】外部接口传入的参数,或其它模块维护的全局变量,使用之前必须判断是否合法没有判断外部传入指针非空【问题描述】终端向服务器注册,服务器返回403失败响应,这时终端向服务器发送群组广告,服务core。【问题定位】从core文件中看,是空指针引起。根据core文件中提供的的信息,反向检视代码,发现蓝色部分存在问题,对获取到的变量未做空指针判断:pSession->SetUserContext(pLogic->GetPoCPCUUserContext()); 在用户未注册上时,服务器清空了资源,使得pLogic->GetPoCPCUUserContext()取出来时为空,但传入方与接收方都未做空指针判断,导致出现问题.【纠正措施】对传入的指针应做合法性检查IPoCPCUUserContext*pContext=pLogic->GetPoCPCUUserContext();If(NULL==pContext){pSession->SetUserContext(pContext);}【举一反三】外部接口传入的指针,多个对象使用,很可能一方更改了,而另一方不知道的情况,使用之前必须判断是否合法没有判断文件输入数据非空【问题描述】MM代码中使用了非法指针导致(空指针)服务器发生宕机。。【问题定位】,hr=pRootNode->get_firstChild(&pLogItem);//,导致读出pLogItem为空…..hr=pLogItem->get_nextSibling(&pMediaNextNode);//pLogItem为空,导致宕机【纠正措施】对指针应做合法性检查if(pLogItem==NULL)returnretValue;hr=pLogItem->get_nextSibling(&pMediaNextNode);【举一反三】外部文件读入的指针,可能为空,使用之前必须判断是否合法没有判断文件输入数据非空(续)【问题描述】在某省项目中,现场开发了与第三方的网管系统(以后简称E1)的接口程序(以后简称E2),用于接收网管上的所有实时告警信息。在不定期的情况下,接口程序E2会coredump。【问题