程序常見嚴(yán)重Bug-(程序穩(wěn)定性)_第1頁
程序常見嚴(yán)重Bug-(程序穩(wěn)定性)_第2頁
程序常見嚴(yán)重Bug-(程序穩(wěn)定性)_第3頁
程序常見嚴(yán)重Bug-(程序穩(wěn)定性)_第4頁
程序常見嚴(yán)重Bug-(程序穩(wěn)定性)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上程序常見嚴(yán)重Bug(程序穩(wěn)定性)(技術(shù)研發(fā)中心整理)1、 死循環(huán)int pos = RandomInt(qc-qacount); if(MenuItempos.size() != 0) pos = (pos+1) %(qc-qacount); while(MenuItempos.size() != 0) pos = (pos+1) %(qc-qacount);原因:while循環(huán)在特殊邏輯下無法退出。 for(int i = 0; i n; i +) . i -; .原因:循環(huán)控制變量i出現(xiàn)了自減,導(dǎo)致死循環(huán)。2、 數(shù)組越界保護(hù) int GetVectorData(i

2、nt index) if(index = m_DataVct.size() return 0; return m_DataVctindex;原因:在沒有判斷(index = m_DataVct.size()的情況下,數(shù)組m_DataVctindex可能會越界訪問。 for ( int i = 0; i (int)collectItemList.size(); i+ )vector npcIds = collectItemListi.npcIds;for ( size_t j = 0; j GetScene() ); 原因:npcIdsi應(yīng)該是npcIdsj才對。3、 map查找越界hash_m

3、ap :const_iterator it = hashmap_PropGroups.find(groupid);if (it = hashmap_PropGroups.end()return false;const S_PROPGROUP_ITEM & propgroup = (*it).second;原因:在沒有判斷it = hashmap_PropGroups.end()的情況下it為結(jié)束,(*it).second訪問出錯。4、 公共數(shù)據(jù)號加鎖 int space_index = pKernel-GetPubSpaceIndex( competeinfo_spacename.c_str(

4、) );if ( space_index FindPubRec( space_index, point_recname.c_str() ) )return false;/加鎖BEGIN_LOCK_PUBSPACE(space_index);原因:在通過GetPubSpaceIndex函數(shù)調(diào)用的情況下space_index必須判斷是否存在,否則導(dǎo)致后續(xù)操作和加鎖失敗。5、 公共數(shù)據(jù)加鎖解鎖 /加鎖BEGIN_LOCK_PUBSPACE(space_index); /競技場的出生點if ( ! pKernel-FindPubData(space_index, WaitSceneBorn) )pKe

5、rnel-AddPubData(space_index, WaitSceneBorn, VARTYPE_STRING);pKernel-SetPubDataSave(space_index, WaitSceneBorn, false); return false; /錯誤,沒有解鎖就返回了 /解鎖END_LOCK_PUBSPACE( space_index );原因:在進(jìn)行了公共數(shù)據(jù)加鎖后必須進(jìn)行解鎖操作,否則導(dǎo)致后續(xù)加鎖失敗。6、 除0int m = 100/vecItems.size();原因:在進(jìn)行除法運(yùn)算時沒有判斷vecItems.size(),導(dǎo)致除零錯誤。7、 取模0 int n

6、= 100%vecItems.size() 原因:在進(jìn)行取模運(yùn)算時沒有判斷vecItems.size(),導(dǎo)致錯誤。8、 空指針判斷 void SetString(char *pStr) string str = pStr;原因:沒有判斷pStr是否為空,在給string對象賦值時導(dǎo)致當(dāng)機(jī)。 void SetData(const SMyData *pData) int n = pData-iValue; 原因:與上類似。9、 變量沒有初始化 int width,height; . .CRect rect(width,height);原因:在Debug模式下變量都會被初始化為0,但在Releas

7、e模式下變量的初始值為隨機(jī)值,容易導(dǎo)致程序在發(fā)布后出現(xiàn)詭異Bug。10、 函數(shù)遞歸調(diào)用 void FunctionA() if(.) FunctionB(); void FunctionB() if(.) FunctionA(); 原因:在一定條件下FunctionA和FunctionB會相互調(diào)用,無法退出,導(dǎo)致堆棧被耗盡而當(dāng)機(jī)。 void FunctionA() if(.) FunctionA(); else return ; 原因:在遞歸深度超過一定限制時,導(dǎo)致堆棧被耗盡而當(dāng)機(jī)。11、 復(fù)雜的STL操作(跨線程STL操作) vector g_DataVect;/全局資源數(shù)組 void Fu

8、nctionA() g_DataVect.reserve(100);原因:禁止在程序運(yùn)行時寫操作全局?jǐn)?shù)據(jù),禁止程序運(yùn)行時使用復(fù)雜的STL函數(shù)。12、 內(nèi)存丟失(內(nèi)存亂使用) CMyClass *pObject = new CMyClass(); . if(.) return; /錯誤,沒有釋放就返回了。 . delete pObject; 原因:給對象pObject分配了內(nèi)存空間,但是在返回前沒有釋放,導(dǎo)致內(nèi)存丟失。 不論是客戶端還是服務(wù)器都禁止在運(yùn)行過程中隨意的使用動態(tài)內(nèi)存。13、 內(nèi)存越界操作 char sStr10;.sStr11 = s;或者:strcpy(sStr,“123”);原因:sStr只有10個字節(jié)長度,但是卻對11個元素進(jìn)行操作,導(dǎo)致其他內(nèi)存數(shù)據(jù)被改寫。14、 浮點數(shù)等于判斷 float fVal = 1.0f; . if (fVal = 1.0f) .原因:fVal = 1.0f后可能精度丟失,變?yōu)?.99999f,所以后面判斷(fVal = 1.0f)不成立,導(dǎo)致詭異錯誤(隨機(jī)的)。15、 靜態(tài)變量使用 Void PushTemp() static NodeList tmpList; while ( 1 ) tmpList.push_front ( pNode ); . break; 原因:靜態(tài)變量與全局變量類似,在多線程下會造成多個線

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論