Chinaunix首页 | 论坛 | 博客
  • 博客访问: 523297
  • 博文数量: 80
  • 博客积分: 1496
  • 博客等级: 上尉
  • 技术积分: 1292
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-18 11:24
个人简介

IT码农一个~

文章分类

全部博文(80)

文章存档

2020年(3)

2019年(7)

2017年(1)

2016年(2)

2015年(2)

2014年(26)

2013年(26)

2012年(2)

2011年(1)

2010年(1)

2008年(9)

我的朋友

分类: C/C++

2013-09-04 16:46:16

大家都知道,数组下标访问越界会造成core;
但是写代码的时候,还是会由于各种原因或者疏忽造成致命的问题。

这里有个基本情景:

enum { EQUIP_COUNT = 16, EQUIP_SKILL_COUNT =4 , }

class A
{
  int  equip_list[EQUIP_COUNT];
  int  equiped_skill_list[EQUIP_SKILL_COUNT ];
  std::map    skill_inventory ;
}


在某func内部
int find_key_index(int key)
{
    for (int i=0; i < EQUIP_COUNT; i++)   // 这里本应该是 EQUIP_SKILL_COUNT , 结果写成了 EQUIP_COUNT, 导致下标越界
    {
            if ( key == equiped_skill_list[i] )
                return i;

    }

    return -1;
}

关键是这个函数运行了一年多都没core,上线后突然core了。
core在了map skill_inventory 的find中, 因为在调用find_key_index函数后,
返回了个 9, 而这个9 已经越界到map skill_inventory内部,修改了map的begin()指针,
结果,find时就直接core掉了。
一开始查看 map的内容都是okay的。

后来查代码 ,发现是这个问题。
太郁闷了!!!

















阅读(2111) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~