Я работаю над проектом Box2D и продолжаю получать ошибки сегментации. Вот код проблемы:
PhysicsObject::PhysicsObject(b2World *w, sf::Texture& tex, int sX,
int sY, b2BodyDef bodyDef, b2FixtureDef fixDef)
: DrawableObject(tex, sX, sY)
{
body = w->CreateBody(&bodyDef);
body->CreateFixture(&fixDef);
}
PhysicsObject
имеет защищенное тело переменной члена, которое является b2Body*
, Я получаю ошибку сегментации на body->CreateFixture
линия. Мой отладчик показывает, что w->createbody
call меняет значение body, поэтому возвращает указатель. Тем не менее, я думаю, что указатель нигде не указывает. Кроме того, мир успешно создает тело; если я закомментирую проблемную линию, тело будет создано, и я вижу, как оно рисуется вместе с остальной частью моей программы. Кто-нибудь знает, что может быть причиной неверного указателя тела?
Спасибо
РЕДАКТИРОВАТЬ:
Вот код из Box2D CreateBody
функция:
Также, IsLocked()
был ложным, когда я проверил это, так что это утверждение не проблема
b2Body* b2World::CreateBody(const b2BodyDef* def)
{
b2Assert(IsLocked() == false);
if (IsLocked())
{
return NULL;
}
void* mem = m_blockAllocator.Allocate(sizeof(b2Body));
b2Body* b = new (mem) b2Body(def, this);
// Add to world doubly linked list.
b->m_prev = NULL;
b->m_next = m_bodyList;
if (m_bodyList)
{
m_bodyList->m_prev = b;
}
m_bodyList = b;
++m_bodyCount;
return b;
}
Также это значение body после вызова функции createbody
(b2Body *) 0xc1ad40
Вроде бы нормальный указатель
Задача ещё не решена.
Других решений пока нет …