I want to make simple AI using FSM. When I simply make object it works perfectly fine but when I put them in vector it crashes after second update. Here is smallest code that shows this problem
class State
{
public:
    virtual ~State() = default;
    void setContext(Context* context);
    virtual void processState() = 0;
protected:
    Context* m_Context;
};
void State::setContext(Context* context)
{
    m_Context = context;
}
class State1 : public State
{
public:
    virtual void processState() override;
};
void State1::processState()
{
    std::cout << "Processing State1" << std::endl;
    m_Context->setState(new State2);
}
class State2 : public State
{
public:
    virtual void processState() override;
};
void State2::processState()
{
    std::cout << "Processing State2" << std::endl;
    m_Context->setState(new State1);
}
class Context
{
public:
    Context(State* state);
    void update();
    void setState(State* state);
private:
    State* m_State;
};
Context::Context(State* state)
{
    setState(state);
}
void Context::update()
{
    m_State->processState();
}
void Context::setState(State* state)
{
    delete m_State;
    m_State = state;
    m_State->setContext(this);
}
If I make it like this
Context context(new State1);
context.update();
context.update();
context.update();
context.update();
context.update();
it works and prints
Processing State1
Processing State2
Processing State1
Processing State2
Processing State1
but if I make it like this
std::vector<Context> contexts;
size_t amount = 1;
contexts.reserve(amount);
for (size_t i = 0; i < amount; i++)
{
    Context context(new State1);
    contexts.push_back(context);
}
for (size_t i = 0; i < amount; i++)
{
    for (size_t j = 0; j < 5; j++)
    {
        contexts[i].update();
    }
}
it only prints first state, crashes on second and gives this error code
Processing State1
-1073741819.
I tried to use break points but i still don't understand what's going on
 
    