大体代码是这样:
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也定位在最上层的入口函数。