1 / 50
文档名称:

低级错误案例集.doc

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

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

分享

预览

低级错误案例集.doc

上传人:夏天教育 2022/7/28 文件大小:306 KB

下载得到文件列表

低级错误案例集.doc

文档介绍

文档介绍:初级错误案例集
初级错误案例集
初级错误案例集
初级错误案例集内部公然
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前释放中止信号量。

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