1 / 43
文档名称:

软件编程低级错误:内存泄漏.ppt

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

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

分享

预览

软件编程低级错误:内存泄漏.ppt

上传人:中华文库小当家 2020/11/19 文件大小:4.43 MB

下载得到文件列表

软件编程低级错误:内存泄漏.ppt

文档介绍

文档介绍:security Level:
blic
公司常见软件编程低级
错误:内存泄漏
C语言软件编程规范工作组
wwa huwei. com
HUANCI TECHNOLOGIES CO. LTD
Huawei confidential
HUAW∈
前言
这套材料作为编程规范的辅助材料,帮助大家理解编程规范背后的原理
·C和C+语言是我司的主流编程语言,然而cC++具有很多强大的语言特性,从而
导致cC++非常复杂,使得代码更容易出现BUG、难以阅读和维护
业界知名的编程规范都对cC艹+容易出现问题的语言特性进行管理。例如MSRA
(汽车工业软件可靠性联合会)制定的1998版的 MISRAC规范指出,一些在C看来
可以接受,却存在隐患的地方有127处之多。2004版的 MISRAC规范将针对C语言
的规则增加到了141条
·对于程序员来说,能工作的代码并不等于“好”代码。“好”代码的指标很多,包
括可读性、可维护性、可移植性和可靠性等。出现网上问题的代码,大多数是不良
编程****惯引起的。不遵守编程规范的代码,往往也是最不可靠的代码
本胶片收集了常见的内存泄漏案例,给出了相应的纠正措施。对应的编程规范:防
止内存泄漏;函数中分配的内存,在函数退出之前要释放
HUAWEI TECHNOLOGIES CO. LTD
Huawei Confiden
HUAWEI
内存泄漏案例问题和纠正措施建议
异常出口处没有释放内存/定时器/文件句柄看見 retur等要注,嬰去晌面找资源
器花结的其
H除绪构针时,壅从底向上展製序
没有释放数阻的胧员指针
数组时,保数组中的个高抬针
名久定时器的内存
亚的分配与释成不在同一个地方,可以
删除日
抬针玉新赋
尽在帮指针,倍速,面
C+的析构数有释敢肉存
或数中请的旋源应该在出时释放
不要将多个判斷条件写在一起
用复杂请句或数:没有及时释放不使用尽案过于复杂的函效,成及时释放
内存和
续易交量水数:一个句,多个分际料德m势实公黑期拿若的部
m墓在块甲署:舞蒸检卖建出在
中内打以后才进行异常检
要径要中第楹套成既出条件
未时加入列,异常抛出时内存泄
意表数舞含如坐共落
没有释放队列中的内和
重复连数据
强制关印线程:没有释放线程占据的资派用自身的出函
HUAWEI TECHNOLOGIES CO. LTD
Huawei Confiden
HUAWEI
异常出口处没有释放内存
【问题描述】代码飞检发现如下代码
(PDBDevMsg)GetBuff( sizeof( DBDevMsg ) LINE)
f( pMsgDB DEV NULL )
return
pMsgDBApp To Logic =(LPDBSe I fMsg)GetBuff( s izeof( DBSe I fMsg)
LINE
if( pMsgDbApp To Logic = NULL)[
return
【问题定位】在第2个 return处, pMsgDB DEV指向的内存丢失
HUAWEI TECHNOLOGIES CO. LTD
Huawei Confiden
HUAWEI
异常出口处没有释放内存(续1)
【问题描述】代码飞检发现如下代码
/*在AⅥ树中添加节点*
I F VC AVL Add Node( &stavLNodeKey, pstBas Portindex
uIRet =IF BAS VC CreateVC((*pstBasPortIndex), ullfinde
if( urEt!=vos吣κK)/*创建v控制块失败*/
return
【问题定位】创建v控制块失败时, return前没有删除AⅥL树中的节点
【举一反三】看见 return要注意,要去前面找资源,特别要注意链表等数据结构中
的资源
HUAWEI TECHNOLOGIES CO. LTD
Huawei Confiden
HUAWEI
异常出口处没有释放信号量资源
【问摧述&定位】代码飞检发
np ss semB
Q FIFo (g ims vport bi
NP_SS_ASSERT(O, Create qing sem falled!l;
群 SOFT Vcrsion
np ss semB create(NP SEM EMPTY, NP SEM Q FIFo, &(g ims vport base info. cqing base info
ifrc!= NP RC SUCCESS)申请倩号量失败
PSS_ASSERT(, " Create qing sem f