Проблема с созданием шаблона ООП "State"

Имеется функция, в которую передаются некоторые параметры. Я хочу в зависимости от этих параметров, сделать разветвление и соответственное выполнение функции. Но при вызове функции request происходит ошибка std::bad_alloc. В чём может быть проблема?

class State{
public:
    virtual void handle(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, int& begin) = 0;
};

class ConcreteStateA : public State {
public:
    void handle(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, int& begin) override {
        ScheduleCH.push_back(tokens[begin]);
        ScheduleZN.push_back(tokens[begin]);
        ScheduleCH.push_back(tokens[begin + 1]);
        ScheduleZN.push_back(tokens[begin + 2]);
        begin += 3;
    }
};

class ConcreteStateB : public State {
public:
    void handle(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, int& begin) override {
        ScheduleCH.push_back(tokens[begin]);
        ScheduleZN.push_back(tokens[begin]);
        ScheduleCH.push_back(tokens[begin + 1]);
        ScheduleZN.push_back(tokens[begin + 1]);
        begin += 2;
    }
};

class Context{
private:
    State* state;
public:
    Context() : state(nullptr){};
    void set_state(State* s){
        delete[] state;
        state = s;
    }
    void request(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, int& begin){ state->handle(ScheduleCH, ScheduleZN, tokens, begin); }
};

void ScheduleParser::fill_weeks(std::vector<std::string>& ScheduleCH, std::vector<std::string>& ScheduleZN, std::vector<std::string> tokens, std::vector<std::string> days, std::vector<std::string> time){
    for (int j = 0; j < 6; j++){
        for (int i = 0; i < tokens.size(); i++){
            if (tokens[i] == days[j]){
                ScheduleCH.push_back(days[j]);
                ScheduleZN.push_back(days[j]);
                int begin = i + 4;
                for (int k = 1; k < 8; k++){
                    Context* context;
                    if (tokens[begin + 2] != time[k]){
                        context->set_state(new ConcreteStateA());
                    }
                    else{
                        context->set_state(new ConcreteStateB());
                    }
                    context->request(ScheduleCH, ScheduleZN, tokens, begin);
                    delete[] context;
                }
            }
        }
    }
}

Ответы (0 шт):