1 / 43
文档名称:

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

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

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

分享

预览

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

上传人:分享精品 2016/2/27 文件大小:0 KB

下载得到文件列表

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

相关文档

文档介绍

文档介绍:HUAWEI TECHNOLOGIES CO., Confidential Security Level: Internal Public件编程规范工作组公司常见软件编程低级错误:内存泄漏Page 2Huawei Confidential HUAWEI TECHNOLOGIES CO., ?这套材料作为编程规范的辅助材料,帮助大家理解编程规范背后的原理。?C和C++语言是我司的主流编程语言,然而C/C++具有很多强大的语言特性,从而导致C/C++非常复杂,使得代码更容易出现BUG、难以阅读和维护。?业界知名的编程规范都对C/C++容易出现问题的语言特性进行管理。例如MISRA(汽车工业软件可靠性联合会)制定的1998版的MISRAC规范指出,一些在C看来可以接受,却存在隐患的地方有127处之多。2004版的MISRAC规范将针对C语言的规则增加到了141条。?对于程序员来说,能工作的代码并不等于“好”代码。“好”代码的指标很多,包括可读性、可维护性、可移植性和可靠性等。出现网上问题的代码,大多数是不良编程****惯引起的。不遵守编程规范的代码,往往也是最不可靠的代码。?本胶片收集了常见的内存泄漏案例,给出了相应的纠正措施。对应的编程规范:防止内存泄漏;函数中分配的内存,在函数退出之前要释放Page 3Huawei Confidential HUAWEI TECHNOLOGIES CO., 4Huawei Confidential HUAWEI TECHNOLOGIES CO., 【问题描述】代码飞检发现如下代码:pMsgDB_DEV = (PDBDevMsg)GetBuff( sizeof( DBDevMsg ), __LINE__);if( pMsgDB_DEV == NULL ) {return;}pMsgDBApp_To_Logic = (LPDBSelfMsg)GetBuff( sizeof(DBSelfMsg), __LINE__ );if( pMsgDBApp_To_Logic == NULL ) {return;}【问题定位】在第2个return处,pMsgDB_DEV指向的内存丢失Page 5Huawei Confidential HUAWEI TECHNOLOGIES CO., (续1)【问题描述】代码飞检发现如下代码:/*在AVL树中添加节点*/IF_VC_AVL_AddNode( &stAVLNodeKey, pstBasPortIndex, pareNode)ulRet = IF_BAS_VC_CreateVC((*pstBasPortIndex),ulIfIndex);if (ulRet != VOS_OK ) /*创建VC控制块失败*/{return;}【问题定位】创建VC控制块失败时,return前没有删除AVL树中的节点【举一反三】看见return要注意,要去前面找资源,特别要注意链表等数据结构中的资源Page 6Huawei Confidential HUAWEI TECHNOLOGIES CO., 【问题描述&定位】代码飞检发现如下代码:rc = np_ss_semB_create(NP_SEM_EMPTY, NP_SEM_Q_FIFO, ()); if(rc != ESS)/*申请信号量失败*/{ NP_SS_ASSERT(0, "Create qinq sem failed!"); return rc;} #if SOFT_Versionrc = np_ss_semB_create(NP_SEM_EMPTY, NP_SEM_Q_FIFO, &());if(rc != ESS)/*申请信号量失败*/{ NP_SS_ASSERT(0, "Create qinq sem failed!"); return rc; //} #endif………………………….NP_FREE_SEM(); #if SOFT_VersionNP_FREE_SEM(); #en