1 / 76
文档名称:

低级错误案例集.doc

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

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

分享

预览

低级错误案例集.doc

上传人:wenjun1233211 2020/5/29 文件大小:324 KB

下载得到文件列表

低级错误案例集.doc

文档介绍

文档介绍:TOP1资源泄漏 资源泄漏(包括内存泄漏)是代码Review中最常见的错误之一,申请的每个资源必须明确由谁负责释放,何时释放,在何处释放;在异常/错误/返回处理中,保持清醒的头脑,清理战场。此处的资源还包括信号量、定时器、文件句柄等系统资源。【问题描述】 宏里面有return语句导致内存泄漏案例一。【问题分析】1)错误代码:/*定义宏MODEL_ASSERT_RETFAIL*/#defineMODEL_ASSERT_RETFAIL(X){if(X不合法)return;}….//dosomethingMDSTrafficMsg*pMsg=VOS_AllocMsg(PID_MD,usLength);if(NULL_PTR==pMsg){return;}MDSDataListenerMgr*pDataListener=MDSDataInitalListenerMgr();MODEL_ASSERT_RETFAIL(pDataListener);2)分析: 使用宏MODEL_ASSERT_RETFAIL检查pDataListener是否合法,如果不合法,则直接返回,一旦返回,将导致前面通过指针pMsg申请到的消息包资源泄漏。【纠正方法】在宏MODEL_ASSERT_RETFAIL分支判断return前加上VOS_FreeMsg(PID_MD,pMsg):该方法代码不够清晰,当用户看宏定义时,对VOS_FreeMsg(PID_MD,pMsg)不清楚还要跳回来看前面的代码。设定该宏有返回值(指针不为空返回VOS_True,否则为VOS_False),将宏的return语句写在宏使用后(判断指针pDataListener合法性),若宏返回VOS_False释放pMsg并返回主调函数:该方法在遇到只判断一个指针的合法性时,浪费代码行、降低代码飞检效率且可能存在宏描述歧义等问题,简单的判断建议不使用宏。【经验教训】在XX版本的一个新模块的开发中,在TR5之前进行大话务量测试验证时,发现系统内存资源不足,当时TR5在即,这个问题影响到TR5过点,经过协调多个技术专家封闭攻关,花了三天时间终于发现问题所在,人力成本高达3000,对于内存使用,要确保释放闭环,所有异常退出点都需要释放内存。【问题描述】 宏里面有return语句导致内存泄漏案例二。【问题分析】1)错误代码:头文件中的宏定义如下:/#defineNODE_RETURN_ERROR(p){if(NULL==p)\VOS_RECORD_ERROR(p);\returnNULL;\}文件中有个函数有如下代码段:...//dosomethingpNode=(Node_Head_S*)malloc(sizeof(Node_Head_S));NODE_RETURN_ERROR(pNode);//第一次使用宏pBody=(Node_Body_S*)malloc(sizeof(Node_Body_S));NODE_RETURN_ERROR(pBody);//第二次使用宏...//dosomething2)分析: 当通过指针pBody申请内存,然后通过宏NODE_RETURN_ERROR来判断是否申请成功,如果申请失败,则在宏NODE_RETURN_ERROR里面就直接返回了,这样导致通过指针pNode申请的内存泄漏了。【纠正方法】 不使用宏,或将宏中的return语句写到宏调用后。【问题描述】 异常出口没有释放应该释放的内存案例一。【问题分析】1)错误代码://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){return;}2)分析: 在第2个return处,pMsgDB_DEV指向的内存丢失。【纠正方法】 在第2个return处增加释放内存的操作。【经验教训】 函数中有动态申请内存,要在函数范围内检查所有return语句是否释放该return语句前所有动态申请的内存。【问题描述】 异常出口没有释放应该释放的内存案例二。【问题分析】1)错误代码:/*申请内存空间,存放解压缩后的逻辑文件*/pucExpandBuf=(UCHAR*)VOS_MemAlloc((ULONG)PID_PHY,BLOCK_MEM_PT,VOIPFPGA_FILE_LENGTH);if(PTR_NUL

最近更新

2024年爸爸妈妈我想对你说作文5篇 7页

MR三维重建膝关节研究前交叉韧带等距点的中期.. 1页

2024年父亲的手的作文推荐7篇 10页

MP3数字音频编解码算法的研究及实现的中期报告.. 2页

Mo-15Cu电子封装板材的致密化行为的任务书 1页

2024年爱心捐款倡议书格式范文0字6篇 5页

MK、VEGF在急性白血病和多发性骨髓瘤中的表达.. 2页

MIMO系统空域相关性分析与信道估计的中期报告.. 1页

MIMO无线通信系统中的信道信息获取及预编码方.. 1页

MIMO-OFDM系统同步问题研究的中期报告 1页

Micro-Tom番茄高效遗传转化体系建立的任务书 2页

MgZn界面原子扩散的分子动力学模拟的任务书 2页

2024年热门关于执行异议申请书参考范文7篇 18页

Mesothelin和STAT3在胰腺癌中的表达及其临床意.. 1页

MEMS安全系统基本问题研究的中期报告 2页

2024年点与数的教案小班8篇 17页

2024年灯作文600字作文优秀6篇 8页

2024年演讲说诚信演讲稿通用7篇 18页

MBR处理垃圾渗沥液的任务书 2页

2024年演讲稿格式范文800字高中篇 20页

MADSbox基因在豌豆花发育中的功能研究的中期报.. 2页

2024年湘版美术上册教学计划8篇 22页

LY电气公司发展战略研究的中期报告 2页

2024年温暖作文500字作文通用7篇 10页

2023年小学汉字听写大赛试题 7页

(完整word版)九宫格数独题目(打印版) 120页

海康威视实习报告 15页

中考物理考试大纲 10页

发货签收单(共1页) 1页

最新山东省区域性大气污染物综合排放标准DB37.. 15页