下载此文档

低级错误案例集.doc


文档分类:办公文档 | 页数:约50页 举报非法文档有奖
1/50
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/50 下载此文档
文档列表 文档介绍
初级错误案例集
初级错误案例集
初级错误案例集
初级错误案例集内部公然
TOP1资源泄露
资源泄露(包括内存泄露)是代码Review中最常有的错误之一,申请的每个资源必须明

【问题描绘】
异样出口没有释放应当释放的内存案例一。
【问题剖析】
错误代码:
GetBuff函数的作用是申请动向内存
pMsgDB_DEV=(PDBDevMsg)GetBuff(sizeof(DBDevMsg),__LINE__);
if(NULL==pMsgDB_DEV)
{
return;
}
GetBuff函数的作用是申请动向内存
pMsgDBApp_To_Logic=(LPDBSelfMsg)GetBuff(sizeof(DBSelfMsg),__LINE__);
if(NULL==pMsgDBApp_To_Logic)
{
初级错误案例集
初级错误案例集
初级错误案例集
2020-5-26华为机密,未经许可不得扩散第3页,共62页
初级错误案例集
初级错误案例集
初级错误案例集
初级错误案例集内部公然
return;
}
2)剖析:
在第2个return处,pMsgDB_DEV指向的内存丢掉。
【纠正方法】
在第2个return处增加释放内存的操作。
【经验教训】
函数中有动向申请内存,要在函数范围内检查所有return语句是否释放该return语句前所有动向申请的内存。

【问题描绘】
申请过的内存的指针没有释放,又申请新的内存给它。
【问题剖析】
错误代码:
/*申请新的内存大小*/
pTmp=VOS_Malloc(pMacroEdit->ulMacroLen+1);
if(NULL==pTmp)
{
returnFAILURE;
}
VOS_MemSet(pTmp,'\0',pMacroEdit->ulMacroLen+1);
......
/*又申请新的内存*/
pTmp=VOS_Malloc(sizeof(TTTT_RPC_MSG_S));
if(NULL==pTmp)
{
初级错误案例集
初级错误案例集
初级错误案例集
2020-5-26华为机密,未经许可不得扩散第4页,共62页
初级错误案例集
初级错误案例集
初级错误案例集
初级错误案例集内部公然
returnFAILURE;
}
.
VOS_Free(pTmp);
2)剖析:
第一次申请的内存没有释放就使用同一个指针又申请了内存。这样第一次申请的内存就
永远没办法释放了,造成了内存泄露。
【纠正方法】
第2次申请内存前,先释放掉第1次申请的内存。同时我们应当注意到这个案例中关于申
请的内存使用的指针变量是个临时变量,其命名没有十分明确的承载其所指向内存的含义,这样命名是不规范的,或许恰好就是因为这点,才引发了后边持续直接使用.

【问题描绘】
异样出口没有释放应当释放的资源。
【问题剖析】
错误代码:intr_lock();
/*填充消息*/
ulResult=DEV_MA_FillMsg(pMsg,ucPrimID,usBIndex,ucSerailID);
if(ulResult!=MSP_RETURN_NO_ERR)
{
VOS_FreeMsg(PID_DEV,pMsg);
returnulResult;
}
intr_unlock();
2)剖析:
初级错误案例集
初级错误案例集
初级错误案例集
2020-5-26华为机密,未经许可不得扩散第5页,共62页
初级错误案例集
初级错误案例集
初级错误案例集
初级错误案例集内部公然
return前没有调用intr_unlock()释放中止信号量。
【纠正方法】
return前释放中止信号量。

【问题描绘】
分支考虑不全,致使某些分支中内存泄露

低级错误案例集 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数50
  • 收藏数0 收藏
  • 顶次数0
  • 上传人夏天教育
  • 文件大小306 KB
  • 时间2022-07-28