Cocos2d iphone cocos2d码中SIGABRT错误的解决

Cocos2d iphone cocos2d码中SIGABRT错误的解决,cocos2d-iphone,physics,sigabrt,box2d-iphone,Cocos2d Iphone,Physics,Sigabrt,Box2d Iphone,我不知道我做错了什么。我得到了一个SIGABRT错误,我想这与下面代码中的for循环有关。谁能帮我一下吗。提前谢谢 b2BodyDef ropeBodyDef; ropeBodyDef.linearDamping = 0.2; ropeBodyDef.angularDamping = 0.2; ropeBodyDef.userData = ropeSprite; b2Body *ropeBody; b2Body *ropeStart = starBody;

我不知道我做错了什么。我得到了一个SIGABRT错误,我想这与下面代码中的for循环有关。谁能帮我一下吗。提前谢谢

b2BodyDef ropeBodyDef;
    ropeBodyDef.linearDamping = 0.2;
    ropeBodyDef.angularDamping = 0.2;
    ropeBodyDef.userData = ropeSprite;
    b2Body *ropeBody;
    b2Body *ropeStart = starBody;
    b2MassData ropeMassData;
    ropeMassData.mass = 1;
    ropeBody->GetMassData(&ropeMassData);

    b2DistanceJointDef ropeJointDef;
    b2DistanceJoint *ropeJoint;
    float dY = starBody->GetPosition().y - fittingBody->GetPosition().y;
    int numSections = ceil(dY/ 55);
    for (float i = 0; i < numSections - 1; i++) {
        // one rope section body

        ropeBodyDef.position.Set(0, starBody->GetPosition().y - dY * i/numSections);
        ropeMassData.mass = 0.8 + 0.8 * i / numSections;

        // rope body
        ropeBody = world->CreateBody(&ropeBodyDef);
        ropeFixture = ropeBody->CreateFixture(&ropeShapeDef);

        [ropeSegments addObject:[NSValue valueWithPointer:ropeBody]];

        // one rope section to another
        ropeJointDef.Initialize(ropeStart, ropeBody, ropeStart->GetPosition(), ropeBody->GetPosition());
        ropeJoint = (b2DistanceJoint*)world->CreateJoint(&ropeJointDef);
        ropeJoint->SetLength(dY / numSections); 

        // update startpoint for next joint
        ropeStart = ropeBody;
    }

    // final rope joint
    ropeJointDef.Initialize(ropeStart, ropeBody, ropeStart->GetPosition(), ropeBody->GetPosition());
    ropeJoint = (b2DistanceJoint*)world->CreateJoint(&ropeJointDef); // THIS IS THE LINE THAT I GET THE SIGABRT 
    ropeJoint->SetLength(dY / numSections); 

    [ropeSegments addObject:[NSValue valueWithPointer:fittingBody]];
您只需将ropeBody声明为下面的第一行,并且已经在其上调用了一个方法,而没有初始化和指定其值:

b2Body *ropeBody; <-- declare here
b2Body *ropeStart = starBody;
b2MassData ropeMassData;
ropeMassData.mass = 1;
ropeBody->GetMassData(&ropeMassData); <-- uh, ropeBody is null or rubbish pointer

请看一看以透视事物什么事物?什么观点?如果你想要更好的透视图,你应该只指出哪一行导致了错误。在完整的代码中,我声明了包括ropeBody在内的所有实体。变量声明不同于实例化。先查一查,理解一下意思。声明它并不意味着它已经有了值。假设您声明了一个b2Body*b。。然后突然你想做b->GetPosition你会得到什么?如果不是运行时错误,就会得到垃圾,因为b不是有效的b2Body。您需要实例化它:b=world->CreateBody。。这是我在你的代码中没有看到的。好的,我明白了,谢谢。我已经进行了更正,但仍然会出现一个SIGABRT错误,指向ropeJoint=b2DistanceJoint*world->CreateJoint&ropeJointDef;在for循环之后