Получил достаточно странный краш на ровном месте:
void DispatchObjectCollsionBox( edict_t *pent )
{
CBaseEntity *pEntity = (CBaseEntity *)GET_PRIVATE( pent );
if( pEntity )
{
> pEntity->SetObjectCollisionBox();
}
else
SetObjectCollisionBox( &pent->v );
}
значение pEntity корректно, SetObjectCollizionBox витруальный.
При попытке вызвать метод через gdb получаю такое:
(gdb) print ((CBaseEntity*)pent->pvPrivateData)->SetObjectCollisionBox()
Cannot access memory at address 0xc47521ed
при попытке вызвать метод явно:
(gdb) print ((CBaseEntity*)pent->pvPrivateData)->CBaseEntity::SetObjectCollisionBox()
Cannot access memory at address 0xc47521d5
vtable судя по всему корректен:
(gdb) print ((CBaseEntity*)pent->pvPrivateData)->SetObjectCollisionBox
$15 = {void (CBaseEntity * const)} 0xf706e8f0 <CBaseEntity::SetObjectCollisionBox()>
Что за странные нечитаемые адреса всплывают?