Box2D CreateBody返回无效指针,导致segfault

时间:2013-02-23 18:00:14

标签: c++ pointers segmentation-fault box2d

我正在开发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 它似乎是一个普通的指针

0 个答案:

没有答案