版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、向配置文件發(fā)送消息進(jìn)行配置下載看見了If,就想Else??匆妋alloc,就去找Free。函數(shù)調(diào)用要小心,需要看看返回值??吹絝or循環(huán),就找邊界值??匆妑eturn要注意,要去前面找資源??匆姅?shù)組把神提,問題往往在下標(biāo)。不要小看字符串,長(zhǎng)度是個(gè)大問題。得到函數(shù)不要急,看看變量初始化,各種路徑要小心賦值函數(shù)最危險(xiǎn),變量沒有初始化。九句句真言不孤立,相互結(jié)合顯神威。真言詳解1.看見If,就想Else??吹絠f語句,就要想到else語句。如果沒有else語句,就要分析是不需要,還是異常情況沒有處理,如果是異常情況沒有處理,可以提單??匆?,就去找??吹絤alloc語句分配了內(nèi)存,立即停下正常走讀,看
2、malloc代碼之后,是否在所有程序的返回分支中都有釋放語句。典型案例:該函數(shù)有了,但沒有看到free。于是在下面的代碼中尋找,發(fā)現(xiàn)中自動(dòng)實(shí)現(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ù)中:接口的類型字符串字符串為空,返回錯(cuò)誤returnDEV_ERR_VALUE;從
5、字為空符串的尾部向前查找,直到找到第一個(gè)不是數(shù)字的字符字符不為等于空.,或數(shù)字為字符時(shí)循環(huán)結(jié)束函數(shù)的一個(gè)錯(cuò)誤返回值是dev_err_value,很顯然,兩邊參數(shù)理解不一致??吹窖h(huán),就找邊界值。看到for循環(huán),就要看看邊界值是否合理。如果循環(huán)變量是數(shù)組的下標(biāo),更加需要注意。例如:函數(shù)中:而數(shù)組:設(shè)備目前只管理物理端口和子接口而數(shù)組定義中,去掉被注釋掉的部分,數(shù)組長(zhǎng)度只有3。數(shù)組將嚴(yán)重越界。看見要注意,要去前面找資源??匆妑eturn語句,尤其是函數(shù)中間的異常返回語句??吹竭@種語句,就需要折回頭去看看前面有沒有分配資源。前面分配的任何資源(包括內(nèi)存,端口,等等),在異常返回處需要一并釋放。例如:
6、在中的函數(shù)中禁止設(shè)置紅色代碼處分配了資源,而在蘭色代碼處異常返回時(shí)沒有被釋放。看見數(shù)組把神提,問題往往在下標(biāo)。函數(shù)中一旦出現(xiàn)數(shù)組,就要提起精神。數(shù)組越界可是個(gè)致命問題。例如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ù)組定義的長(zhǎng)度是1蘭色代碼中:使用的下標(biāo)到了4,數(shù)組嚴(yán)重越界。不要小看字符串,長(zhǎng)度是個(gè)大問題。字符串往往是代碼審查中不被重視的問題。而字符串由于各個(gè)模塊對(duì)其他模塊的不了解,經(jīng)常出現(xiàn)隨便定義一個(gè)字符串長(zhǎng)度的現(xiàn)象。例如:接口的類型字符串字符串為空,返回錯(cuò)誤從字符串的尾部向前查找,直到找到第一個(gè)不是數(shù)字的字符字符不等于或數(shù)字字符時(shí)循環(huán)結(jié)束入口參數(shù)在調(diào)用方定義的長(zhǎng)度是8而的長(zhǎng)度是,因此,紅色代碼:有越界可能。得到函數(shù)不要急,看看變量初始化,各種路徑要小心。在拿到函數(shù)之后,要習(xí)慣性的看看所有的局部變量是在函數(shù)一開始就被初始化了如果有變量沒有被初始化,就要小心了。如果發(fā)現(xiàn)變量是在if,for,while,等語句中被初始化的,問題可能就來了。釋/放/原定時(shí)器申/請(qǐng)定時(shí)器向/源發(fā)出錯(cuò)應(yīng)答/啟/動(dòng)定時(shí)器如果代碼走紅色的分支,則在蘭色的代碼處使用的紅色的變量就沒有被初始化。賦值函數(shù)最危險(xiǎn),變量沒有初始化。在C代碼中,經(jīng)常使用將變量的指針作為參數(shù),在被調(diào)用函數(shù)中對(duì)變量進(jìn)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 園林綠化服務(wù)合同樣本
- 工礦企業(yè)采購合同范本
- 批量物料采購合同格式
- 招標(biāo)文件中的摩托車選購指南
- 焊接作業(yè)人員安全保證書
- 法律服務(wù)建議書撰寫要點(diǎn)
- 藥品物流跟蹤與監(jiān)控協(xié)議
- 寫出明了的保證書
- 換熱機(jī)組招標(biāo)項(xiàng)目招標(biāo)報(bào)名條件
- 標(biāo)準(zhǔn)建筑工程項(xiàng)目勞務(wù)
- 2024年秋季新人教版道德與法治七年級(jí)上冊(cè)全冊(cè)教案
- 傳感技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年哈爾濱工業(yè)大學(xué)
- JBT 11699-2013 高處作業(yè)吊籃安裝、拆卸、使用技術(shù)規(guī)程
- 24春國家開放大學(xué)《離散數(shù)學(xué)》大作業(yè)參考答案
- 國際發(fā)展援助概論智慧樹知到期末考試答案2024年
- 浙江大學(xué)實(shí)驗(yàn)報(bào)告(流體力學(xué))
- 國開電大本科《管理英語3》機(jī)考真題(第一套)
- 2023年大學(xué)生《思想道德與法治》考試題庫附答案(712題)
- DB32T 4353-2022 房屋建筑和市政基礎(chǔ)設(shè)施工程檔案資料管理規(guī)程
- 中國科學(xué)院SCI 2區(qū)期刊目錄
- 羅斯福原版英文演講稿
評(píng)論
0/150
提交評(píng)論