大家都知道,数组下标访问越界会造成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的。
后来查代码 ,发现是这个问题。
太郁闷了!!!
阅读(2163) | 评论(0) | 转发(0) |