对象在release 时崩毁了

#ifndef __WWS__State__
#define __WWS__State__

#include "cocos2d.h"
// #include "Context.h"
// #include "Protagonist.h"


USING_NS_CC;

class Protagonist;
class Context;

class State : public Node
{
public:
    State();
    ~State();

public:
    Protagonist *m_master;

public:
    static State *create(Protagonist *master);
    bool init(Protagonist *master);
    virtual void handle(Context *context);
    virtual void description();

};



#endif


```


State 在create时有加入autorelease

State *State::create(Protagonist *master)
{
    State *pRet = new (std::nothrow)State();
    if (pRet && pRet->init(master))
    {
        pRet->autorelease();
        return pRet;
    }
    else
    {
        delete pRet;
        pRet = NULL;
        return NULL;
    }

}


```


#ifndef __WWS__Context__
#define __WWS__Context__


//#include "State.h"
#include "cocos2d.h"

USING_NS_CC;

class State;

class Context : public Node
{
public:
    Context();
    ~Context();

private:

    State *m_state;

public:
    static Context* create(State *state);
    bool init(State *state);
    void setState(State *state);
    void request();
    void description();



};


#endif


```


#include "Context.h"
#include "State.h"

Context::Context()
{
}

Context::~Context()
{
}



Context* Context::create(State *state)
{
    Context *pRet =  new (std::nothrow)Context();
    
    if(pRet && pRet->init(state))
    {
        pRet->autorelease();
        return pRet;
    }
    else
    {
        delete pRet;
        pRet = NULL;
        return NULL;
    }

}

bool Context::init(State *state)
{

    if(!Node::init())
    {
        return false;
    }

    m_state = state;

    return true;
}

void Context::setState(State *state)
{
    if(m_state != NULL)
    {
        m_state->release();//崩坏的地方
        CCLOG("State free!!!!");
    }
    m_state = state;


}
void Context::request()
{
    m_state->handle(this);
}
void Context::description()
{
    if (m_state)
    {
        m_state->description();
    }
    
}


```



一运行到release时就跳转崩毁


 

有木有大神看看什么情况

autorelease不需要调用relese,会自动释放。要手动释放的,要加上retain

State *State::create(Protagonist *master)
{
State *pRet = new (std::nothrow)State();
if (pRet && pRet->init(master))
{
// pRet->autorelease(); 这段注释掉再运行
return pRet;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}

}

不行,直接就崩毁了

我的state是继承node的 我断点逐语句看 程序还是会在release 是调autorelease的东西 估计是autorelease要释放它但是又找不到它的原因

我试过加retain 但是没有任何作用 错误的位置也是一样

我要release是因为 不知道什么原因 我在关闭程序时 会报错 报错的地方又含有 free 文字 我就猜是我的state没有被消除

state->autorelease()
state->retain()

谢谢 因为的state 和 context 不是可视的类 其他对象new了后没有引用 下一句代码就直接释放了 确实少了retain