软件编程低级错误:野指针上课讲义.ppt

软件编程低级错误:野指针上课讲义.ppt

ID:59927293

大小:631.00 KB

页数:19页

时间:2020-11-28

软件编程低级错误:野指针上课讲义.ppt_第1页
软件编程低级错误:野指针上课讲义.ppt_第2页
软件编程低级错误:野指针上课讲义.ppt_第3页
软件编程低级错误:野指针上课讲义.ppt_第4页
软件编程低级错误:野指针上课讲义.ppt_第5页
资源描述:

《软件编程低级错误:野指针上课讲义.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、软件编程低级错误:野指针野指针:多模块调用的指针删除未赋NULL【问题描述】当D服务执行过程完成后,最后一次修改内存数据库中的数据时发生coredump。【问题定位】D服务coredump处的代码如下:…//new一个CChargEvent对象,用于向共享内存中写入数据pobjChargingEvent=newCChargingEvent;//使用m_pSessionContext将pobjChargingEvent传递给其他模块m_pSessionContext->setDestTLV(pobj

2、ChargingEventEx);…deletepobjChargingEvent;//该行代码是读取操作内存数据库事务ID的,每当调用对内存数据库中的数据进行修改时,都会执行该行代码。TransactionKey=pCBSContext->getTransactionKey();//发生coredump处getTransactionKey的代码见下页野指针:多模块调用的指针删除未赋NULL(续)voidCCBSSessionContext::setDestTLV(CChargingEvent*p

3、ChargingEvent){m_pDestTLV=pChargingEvent;}ENIP::TInt8CCBSSessionContext::getTransactionKey(){if(NULL==m_pDestTLV){return0;}m_pDestTLV->getInt8Tag();…}【纠正措施】在D服务中语句“deletepobjChargingEvent;”之后加上语句“m_pSessionContext->setDestTLV(NULL);”即可。【举一反三】耦合度较强的模块互

4、相调用时,一定要仔细考虑其调用关系,防止已经删除(析构)的对象被再次使用。野指针:传递参数为局部变量【问题描述】SWM在下载升级包操作中增加了一个版本号参数,在验证中发现,对版本的校验中使用的版本号并非传入的版本号,而是被截断了,只保留了前20位,造成比较结果不一致。【问题定位】根据命令执行流程,在参数传递的每一个环节增加调试打印。发现是在调用VOS_CreateTask创建下载任务的环节,传入的版本号参数被截断。代码如下:VOS_CHARacSoftVer[SWM_VERSION_LEN]={0

5、};...aulArgs[0]=(VOS_UINT32)pTmpFtpInfo;aulArgs[1]=enFileType;aulArgs[2]=(VOS_UINT32)pInMsg;aulArgs[3]=(VOS_UINT32)acSoftVer;/*Createanewtaskforloading*/ulRet=VOS_CreateTask("SWM_COMM",&ulTaskID,SWM_OMUFtpTask,m_aulTaskPrio[VOS_PRIORITY_P1],VOS_NULL,a

6、ulArgs);...return;由于acSoftVer是局部变量,在VOS_CreateTask函数执行退出后便被释放,已经变成一个野指针。而SWM_OMUFtpTask函数和SWM_DldVerPkg函数却仍在使用,这就造成了指针所指内容被破坏。【纠正措施】acSoftVer改为动态分配内存,在SWM_OMUFtpTask函数退出前释放。临时对象产生野指针(1)【问题描述】报文结果中总是随机出现乱码,过一会儿又正常了。【问题定位】检视代码发现使用临时对象:constTCHAR*pTempSa

7、ve=(g_pSmuMEControl->GetErrInfoByID()).c_str();SMU_PARA_COPY(pTemp,pTempSave);GetErrInfoByID返回的是该函数内部定义的临时string变量,当函数调用过程完成后,临时变量的生命期就结束,变量将被删除。所以pTempSave指向内存已释放(野指针),继续使用,有时正常,有时出错。【纠正措施】将临时对象赋值给变量,修改代码如下:conststring&strTemp=g_pSmuMEControl->GetErr

8、InfoByID();constTCHAR*pTempSave=strTemp.c_str();SMU_PARA_COPY(pTemp,pTempSave);临时对象产生野指针(2)【问题描述】代码飞检发现如下代码:std::ostringstreamoStream;……constchar*cValue=oStream.str().c_str();….【问题定位】oStream.str()返回临时对象,他们将在表达式结尾析构。指针cValue指向内存已释放,变成了野指针。【纠正措施

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。