- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* D:\技术文件\开发技能\内存问题\luoxu\8016内存案例:S8016产品案例:另类内存越界的定位方法(王立春).lwp * * A85D04600 :修改为: *(TBasetabEPPCStruct*)(TBasetabEPPCDTO*)pTBaseDTO = tStruct_BasetabEPPC; * 错误使用了相似名字的宏定义 【问题描述】主备倒换两个主控板一起复位 【问题定位】内存拷贝(VOS_Mem_Copy)的长度错误,应该使用SRM_LPUSTAT_LEN,错误写成了SRM_LPUDVC_LEN,导致多拷贝了几十个字节,改写了全局数据区的下一个工作路径数据 【纠正措施】使用正确的长度SRM_LPUSTAT_LEN 【举一反三】存在多个相似名字的宏定义时,要特别小心 错误使用了相似名字的宏定义(续) 【问题描述】用户管理界面中,超长名称的操作集添加成员后出现安全进程重启问题。 【问题定位】在修改设备集时,使用长度为USER_NAME_LEN+1的临时数组存放设备集的名称,此处USER_NAME_LEN长度为20,而操作集名称的最大长度LOG_CMDSET_NAME_LEN可以为48,当被修改的操作集名称大于20时,就会导致数组越界,造成安全后台core dump。 【纠正措施】使用正确的长度LOG_CMDSET_NAME_LEN 【举一反三】存在多个相似名字的宏定义时,要特别小心 错误使用了结构名称 【问题描述】如下代码: VOS_Mem_Copy(pIPAddrReqRes-stPPPRequestIPAddress, stGetPool, sizeof(PPP_IPADDRESS_REQUEST_S)); 【问题定位】内存拷贝的源指针和目的指针都是RD_POOL_S结构类型, PPP_IPADDRESS_REQUEST _S是pIPAddrReqRes的结构类型,而不是stPPPRequestIPAddress和stGetPool的结构类型,使用了错误的结构名称,导致内存越界 【纠正措施】把内存拷贝里的sizeof(PPP_IPADDRESS_REQUEST_S)换成sizeof(RD_POOL_S) 【举一反三】memcpy/memset一定要注意使用正确的结构名称。 错误使用了结构名称(续) 【问题描述】如下代码: memset(subDataList.subDataInfo, 0xFF, sizeof(TSubDataInfoList)); 【问题定位】指针subDataList是TSubDataInfoList结构类型,subDataList.subDataInfo 是 TSubDataInfo结构类型,不是TSubDataInfoList结构类型,错误使用父结构名称,导致内存越界 【纠正措施】将sizeof(TSubDataInfoList)换成sizeof(TSubDataInfo) 【举一反三】memcpy/memset一定要注意使用正确的结构名称。在代码拷贝时应该小心。 变量没有初始化(数组下标未赋初值) 【问题描述】××产品的系统测试中,在配置了DHCP、TCP/IP等相关配置后,出现系统重起 【问题定位】新增功能时没有对全局地址池gIpPool[usPoolNum]. ulRouteOption 赋初值。导致计算数组索引usIndex 成为一个非常大的数,然后再根据该usIndex相对位置的指针做个偏移并设置该段内存的数值,就会导致将一段内存区被改写。 【纠正措施】增加对gIpPool[usPoolNum].ulRouteOption在全局地址池情况下的初始化;检查usIndex的合法性。 【举一反三】在修改问题或者增加新功能时,必须对所有的影响做好全面的分析,并且在平时的编程中要注意对每个函数的入参做好保护和检查工作。 变量没有初始化(数组下标某些情况下没有初始化) 【问题描述】代码飞检发现下面的代码: if (stH323OfficeAddr.CalleeTos != HSL_INVALID_TOS_VALUE) { pCurrentCR-ucTos = stH323OfficeAddr.CalleeTos; …… } 【问题定位】当 if 语句的条件不满足时,pCurrentCR-ucTos没有被赋值。程序员之所以在这个函数中遗漏了对ucTos的初始化,是因为很多其它函数对pCurrentCR进行了初始化,初始化的地方很多;大多数情况下,调用此函数之前就已经初始化了pCurrentCR里面的所有成员变量,但存在一种特殊情况,pCurrentCR-ucTos没有被以前的任何函数初始化。 【纠正措施】在其它函数中增加对ucTos的初始化 【举
原创力文档


文档评论(0)