版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年昆明市盘龙区教育发展投资有限公司招聘备考题库含答案详解
- 2025年吉林大学经济学院专业教师招聘5人备考题库(二)及一套答案详解
- 2025年广州市越秀区人民街道办事处公开招聘辅助人员备考题库有答案详解
- 2025年江西中赣投设计本部公开招聘8人备考题库及参考答案详解1套
- 2型糖尿病前期早期筛查与社区管理路径
- 2025年泉州医学高等专科学校附属人民医院公开招聘编制外紧缺急需人才32人备考题库及完整答案详解1套
- 高中艺术展览与美术教学融合的创新路径研究教学研究课题报告
- 2025年北医三院放射科影像诊断医师招聘备考题库含答案详解
- 2025年数字人民币试点进展报告
- 随县事业单位2025年公开招聘“三支一扶”服务期满高校毕业生备考题库及参考答案详解一套
- 餐饮火锅店管理手册样本
- 军事理论-综合版智慧树知到期末考试答案章节答案2024年国防大学
- 办公室装修预算清单
- 《电力大件运输规范》
- 国开电大操作系统实验2:进程管理实验报告
- 机械加工工序卡
- 社交媒体网络虚假信息传播的影响和治理
- 人教部编版五年级语文上册期末试卷(完整)
- 节能基本情况表(打印)
- 电动车转让合同协议书电子版
- 大学生创业计划书word文档(三篇)
评论
0/150
提交评论