程序常见严重Bug-(程序稳定性)_第1页
程序常见严重Bug-(程序稳定性)_第2页
程序常见严重Bug-(程序稳定性)_第3页
程序常见严重Bug-(程序稳定性)_第4页
程序常见严重Bug-(程序稳定性)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上程序常见严重Bug(程序稳定性)(技术研发中心整理)1、 死循环int pos = RandomInt(qc-qacount); if(MenuItempos.size() != 0) pos = (pos+1) %(qc-qacount); while(MenuItempos.size() != 0) pos = (pos+1) %(qc-qacount);原因:while循环在特殊逻辑下无法退出。 for(int i = 0; i n; i +) . i -; .原因:循环控制变量i出现了自减,导致死循环。2、 数组越界保护 int GetVectorData(i

2、nt index) if(index = m_DataVct.size() return 0; return m_DataVctindex;原因:在没有判断(index = m_DataVct.size()的情况下,数组m_DataVctindex可能会越界访问。 for ( int i = 0; i (int)collectItemList.size(); i+ )vector npcIds = collectItemListi.npcIds;for ( size_t j = 0; j GetScene() ); 原因:npcIdsi应该是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为结束,(*it).second访问出错。4、 公共数据号加锁 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函数调用的情况下space_index必须判断是否存在,否则导致后续操作和加锁失败。5、 公共数据加锁解锁 /加锁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 );原因:在进行了公共数据加锁后必须进行解锁操作,否则导致后续加锁失败。6、 除0int m = 100/vecItems.size();原因:在进行除法运算时没有判断vecItems.size(),导致除零错误。7、 取模0 int n

6、= 100%vecItems.size() 原因:在进行取模运算时没有判断vecItems.size(),导致错误。8、 空指针判断 void SetString(char *pStr) string str = pStr;原因:没有判断pStr是否为空,在给string对象赋值时导致当机。 void SetData(const SMyData *pData) int n = pData-iValue; 原因:与上类似。9、 变量没有初始化 int width,height; . .CRect rect(width,height);原因:在Debug模式下变量都会被初始化为0,但在Releas

7、e模式下变量的初始值为随机值,容易导致程序在发布后出现诡异Bug。10、 函数递归调用 void FunctionA() if(.) FunctionB(); void FunctionB() if(.) FunctionA(); 原因:在一定条件下FunctionA和FunctionB会相互调用,无法退出,导致堆栈被耗尽而当机。 void FunctionA() if(.) FunctionA(); else return ; 原因:在递归深度超过一定限制时,导致堆栈被耗尽而当机。11、 复杂的STL操作(跨线程STL操作) vector g_DataVect;/全局资源数组 void Fu

8、nctionA() g_DataVect.reserve(100);原因:禁止在程序运行时写操作全局数据,禁止程序运行时使用复杂的STL函数。12、 内存丢失(内存乱使用) CMyClass *pObject = new CMyClass(); . if(.) return; /错误,没有释放就返回了。 . delete pObject; 原因:给对象pObject分配了内存空间,但是在返回前没有释放,导致内存丢失。 不论是客户端还是服务器都禁止在运行过程中随意的使用动态内存。13、 内存越界操作 char sStr10;.sStr11 = s;或者:strcpy(sStr,“123”);原因:sStr只有10个字节长度,但是却对11个元素进行操作,导致其他内存数据被改写。14、 浮点数等于判断 float fVal = 1.0f; . if (fVal = 1.0f) .原因:fVal = 1.0f后可能精度丢失,变为0.99999f,所以后面判断(fVal = 1.0f)不成立,导致诡异错误(随机的)。15、 静态变量使用 Void PushTemp() static NodeList tmpList; while ( 1 ) tmpList.push_front ( pNode ); . break; 原因:静态变量与全局变量类似,在多线程下会造成多个线

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论