我正在开发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
调用更改了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;
}
这也是我调用createbody函数后body的值
(b2Body *) 0xc1ad40
它似乎是一个普通的指针