遇到的一个bug
大体代码是这样:
class Role; void GameMgr::Handle() { DispParam dp; Role* role = GetRole(xxx); if (!role) { role = CreateRole(...); dp.role = role; } Dispatch(...); }
上面dp的role,如果role是合法的时候,就不会去设置正确的role。
然后经过X层调用后,最后
dp.role->Set(xxxxx); void Role::Set(xxxx) { m_data = xxxx; }
修改了Role内部的数据。
问题表现:
当GameHandle处没有正确初始化dp.role的时候,代码如果是用O2编译的,没问题。如果没用O2的话,代码是运行到最上层调用者才报段错误。
其实问题在上面的Role::Set(...)里面。不知道为什么在最上层才报这个错。core也定位在最上层的入口函数。