版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、向配置文件發(fā)送消息進(jìn)行配置下載看見了If,就想Else??匆妋alloc,就去找Free。函數(shù)調(diào)用要小心,需要看看返回值??吹絝or循環(huán),就找邊界值??匆妑eturn要注意,要去前面找資源。看見數(shù)組把神提,問題往往在下標(biāo)。不要小看字符串,長度是個大問題。得到函數(shù)不要急,看看變量初始化,各種路徑要小心賦值函數(shù)最危險,變量沒有初始化。九句句真言不孤立,相互結(jié)合顯神威。真言詳解1.看見If,就想Else??吹絠f語句,就要想到else語句。如果沒有else語句,就要分析是不需要,還是異常情況沒有處理,如果是異常情況沒有處理,可以提單??匆?,就去找??吹絤alloc語句分配了內(nèi)存,立即停下正常走讀,看
2、malloc代碼之后,是否在所有程序的返回分支中都有釋放語句。典型案例:該函數(shù)有了,但沒有看到free。于是在下面的代碼中尋找,發(fā)現(xiàn)中自動實現(xiàn)free功能。代碼看似沒有問題,但我們發(fā)現(xiàn)的返回值沒有判斷,如果返回失敗,free語句就沒有被執(zhí)行到。這樣可以確認(rèn)該函數(shù)存在內(nèi)存泄露隱患。該代碼最終修改:U32DEV_IfSetSectionEnable(DEV_IF_T*pIfIns)CHAR*pSectionName=NULL;ULONGulMsg4;ULONGrc;/*向配置文件發(fā)送消息DEV_IF_READ_SECTION,進(jìn)行配置下載*/if(pIfIns=NULL|(VOS_strlen(p
3、IfIns-ifName)(MAX_INTERFACE_NAME_LEN+1)returnDEV_ERR_GEN;pSectionName=VOS_Malloc(MOD_DEV,MAX_INTERFACE_NAME_LEN+1);if(pSectionName!=NULL)VOS_strcpy(pSectionName,pIfIns-ifName);ulMsg0=MID_DEV;ulMsg1=MID_CFM;ulMsg2=DEV_CFM_ENABLE_SECTION;ulMsg3=(ULONG)pSectionName;rc=VOS_Que_Write(ulVRPQID_CFM,ulMsg,V
4、OS_NO_WAIT,0);if(rc!=SUCCESS)rc=VOS_Free(pSectionName);VOS_DBGASSERT(rc=VOS_OK);returnDEV_ERR_GEN;returnSUCCESS;returnDEV_ERR_NOMEMORY;3.函數(shù)調(diào)用要小心,需要看看返回值??吹胶瘮?shù)調(diào)用,要養(yǎng)成習(xí)慣,進(jìn)入函數(shù)內(nèi)部瞄一眼??纯春瘮?shù)的正常值和異常值都是什么??纯捶祷刂敌璨恍枰袛???纯从袥]有參數(shù)理解不一致的地方。例如:得*到端口的索引判*斷端口是否已經(jīng)存在函數(shù)使用-1作為非法值,而在函數(shù)中:接口的類型字符串字符串為空,返回錯誤returnDEV_ERR_VALUE;從
5、字為空符串的尾部向前查找,直到找到第一個不是數(shù)字的字符字符不為等于空.,或數(shù)字為字符時循環(huán)結(jié)束函數(shù)的一個錯誤返回值是dev_err_value,很顯然,兩邊參數(shù)理解不一致??吹窖h(huán),就找邊界值??吹絝or循環(huán),就要看看邊界值是否合理。如果循環(huán)變量是數(shù)組的下標(biāo),更加需要注意。例如:函數(shù)中:而數(shù)組:設(shè)備目前只管理物理端口和子接口而數(shù)組定義中,去掉被注釋掉的部分,數(shù)組長度只有3。數(shù)組將嚴(yán)重越界??匆娨⒁猓デ懊嬲屹Y源??匆妑eturn語句,尤其是函數(shù)中間的異常返回語句。看到這種語句,就需要折回頭去看看前面有沒有分配資源。前面分配的任何資源(包括內(nèi)存,端口,等等),在異常返回處需要一并釋放。例如:
6、在中的函數(shù)中禁止設(shè)置紅色代碼處分配了資源,而在蘭色代碼處異常返回時沒有被釋放??匆姅?shù)組把神提,問題往往在下標(biāo)。函數(shù)中一旦出現(xiàn)數(shù)組,就要提起精神。數(shù)組越界可是個致命問題。例如U32rc;U32i,j;/LoopVariableU8pOutputStr80;/outputinfobufferU32ulNetDEV_SLOT_ATMUNIT_MAX_NUM;U8*pOutputStatus;U8*pOutputType;U8*pOutputApcNetDEV_ASLT_SUB_MAX_NUM-1;U8xidx,yidx,tmpPort;U32ulNetVer;U32ulSeq;U32ulLen;vo
7、id*pData;/pointertomsgreceivedU8szBuf256;DEV_NET_SWPTMAP_TsNetSwptMap;/checknetboardnetIndex1=DEV_CONV_SLT2SLTINDEX(NET_CARD1);netIndex2=DEV_CONV_SLT2SLTINDEX(NET_CARD2);pNetIns1=DEV_GetSlotFromIndex(netIndex1);pNetIns2=DEV_GetSlotFromIndex(netIndex2);if(pNetIns1=NULL&pNetIns2=NULL)EXEC_OutString(ul
8、UserID,rnnetboardnotfound);returnSUCCESS;if(pNetIns1!=NULL)rc=DEV_SltGetSlotStatus(netIndex1,&sValue);if(rc)/erroroutputreturnDEV_ERR_GEN;if(sValue.v_num!=DEV_OBJ_STATUS_INACTIVE)netstatus1=DEV_OBJ_STATUS_ACTIVE;if(pNetIns2!=NULL)rc=DEV_SltGetSlotStatus(netIndex2,&sValue);if(rc)/erroroutputreturnDEV
9、_ERR_GEN;if(sValue.v_num!=DEV_OBJ_STATUS_INACTIVE)netstatus2=DEV_OBJ_STATUS_ACTIVE;if(netstatus1=DEV_OBJ_STATUS_INACTIVE&netstatus2=DEV_OBJ_STATUS_INACTIVE)EXEC_OutString(ulUserID,rnallthenetboardareinacitve);returnSUCCESS;/defaultframenumberis0frmIndex=DEV_CONV_FRM2FRMINDEX(DEV_DEFAULT_FRAME);每槽位最大
10、支持最大數(shù)單元數(shù)紅色代碼中:紅色數(shù)組定義的長度是1蘭色代碼中:使用的下標(biāo)到了4,數(shù)組嚴(yán)重越界。不要小看字符串,長度是個大問題。字符串往往是代碼審查中不被重視的問題。而字符串由于各個模塊對其他模塊的不了解,經(jīng)常出現(xiàn)隨便定義一個字符串長度的現(xiàn)象。例如:接口的類型字符串字符串為空,返回錯誤從字符串的尾部向前查找,直到找到第一個不是數(shù)字的字符字符不等于或數(shù)字字符時循環(huán)結(jié)束入口參數(shù)在調(diào)用方定義的長度是8而的長度是,因此,紅色代碼:有越界可能。得到函數(shù)不要急,看看變量初始化,各種路徑要小心。在拿到函數(shù)之后,要習(xí)慣性的看看所有的局部變量是在函數(shù)一開始就被初始化了如果有變量沒有被初始化,就要小心了。如果發(fā)現(xiàn)變量是在if,for,while,等語句中被初始化的,問題可能就來了。釋/放/原定時器申/請定時器向/源發(fā)出錯應(yīng)答/啟/動定時器如果代碼走紅色的分支,則在蘭色的代碼處使用的紅色的變量就沒有被初始化。賦值函數(shù)最危險,變量沒有初始化。在C代碼中,經(jīng)常使用將變量的指針作為參數(shù),在被調(diào)用函數(shù)中對變量進(jìn)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度山西省高校教師資格證之高等教育心理學(xué)自測模擬預(yù)測題庫
- 學(xué)校垃圾分類督導(dǎo)員工作總結(jié)
- 2024年智能設(shè)備硬件采購協(xié)議
- 2024室內(nèi)裝潢工程合作協(xié)議書
- 2024廣告服務(wù)公司與客戶協(xié)議
- 2024年供應(yīng)商協(xié)議格式
- 2024年專項事務(wù)跟蹤代理協(xié)議模板
- 2024城市地下停車場租賃協(xié)議
- 2024年商品交易協(xié)議模板
- 2024年稻草批發(fā)銷售協(xié)議范本
- 培訓(xùn)課程版權(quán)合同模板
- 投訴法官枉法裁判范本
- 密封條范文模板(A4打印版)
- 辛亥革命(共16張PPT)
- 班前安全技術(shù)交底記錄表
- 最新數(shù)字化信息化智能化在磁控濺射臥式鋁鏡生產(chǎn)技術(shù)中應(yīng)用
- 梁場臨建技術(shù)交底
- 鐮刀形細(xì)胞貧血癥PPT課件
- 熱壓封口機(jī)3Q驗證方案
- 第2講同步發(fā)電機(jī)數(shù)學(xué)模型
- 五年級上冊數(shù)學(xué)應(yīng)用題精選150道
評論
0/150
提交評論