已阅读5页,还剩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(int 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_map :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() );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) )pKernel-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 = 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,但在Release模式下变量的初始值为随机值,容易导致程序在发布后出现诡异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 FunctionA() g_DataVect.reserve(100);原因:禁止在程序运行时写操作全局数据,禁止程序运行时使用复杂的STL函数。12、 内存丢失(内存乱使用) CMyClass *pObject = new CMyClass(); . if(.) return; /错误,没有释放就返回了。 . delete pObject; 原因:给对象pObject分配了内存空间,但是在返回前没有释放,导致内存丢失。 不论是客户端还是服务器都禁止在运行过程中随意的使用动态内存。13、 内存越界操作 char sStr10;.sStr11 = s;或者:strcpy(sStr,“01234567890123”);原因: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-2030中国塑料蒸煮罐市场竞争动态与销售策略分析报告
- 2025-2030中国堵塞溜槽探测器行业现状态势与应用趋势预测报告
- 2025-2030中国国际学校行业发展现状及市场潜力分析报告
- 中国流感治疗与药物预防基层指南总结2026
- 护理应急预案指南
- 大班综合美丽的草原
- 云端主题教育创新-1
- 七年级数学教学计划模板锦集7篇
- 历史学基础(古代印度文明、古代希腊文明)模拟试卷1
- 英语法律交叉职业方向
- 工厂禁止吸烟安全培训课件
- 2025至2030中国铁路信号设备行业运营态势与投资前景调查研究报告
- 建设用地报批服务投标方案
- 2025年国家电投笔试重点备考
- 北京市海淀区第五十七中学2024-2025学年八年级下学期期中英语试卷(含答案)
- 加油站员工安全培训教育档案台帐
- 光学作图题课件教学
- 青川佳明年产10万吨石英砂生产线项目环评报告
- 矿山修复培训课件
- 2025年辽宁省本溪市中考三模道德与法治试题(含答案)
- 毕业设计(论文)-包裹分拣机械结构设计
评论
0/150
提交评论