Segmentation fault при добавлении объекта в unordered_map

174
14 февраля 2019, 21:10

Столкнулся с такой проблемой, мне необходимо записать абстрактный класс в unordered_map для дальнейшего использования. Однако, при попытке это сделать постоянно получаю segmentation fault.

class Form {
protected:
    const char *title;
public:
    explicit Form(const char *title) {
        this->title = title;
    }    
    virtual const char *getType() const = 0;    
    const char *getTitle() const {
        return title;
    }    
    string jsonSerialize();    
    virtual void serializeFormData(JsonWriter &writer) {}
};    
class MenuForm : public Form {
protected:
    const char *text;
    const vector<Button *> buttons;
public:
    explicit MenuForm(const char *title, const char *text, vector<Button *> buttons) : Form(title), text(text), buttons(std::move(buttons)) {}    
    const char *getType() const override {
        return "form";
    }    
    void serializeFormData(JsonWriter &writer) override;
};    
struct ServerPlayer : Player {
    int formIdCounter = 0;
    std::unordered_map<int, std::shared_ptr<Form>> forms;    
    void sendNetworkPacket(Packet &packet) const;    
    void sendForm(Form *form) {
        int id = formIdCounter++;    
        ModalFormRequestPacket pk{this->getClientSubId()};
        pk.formId = id;
        pk.formData = form->jsonSerialize();    
        forms.insert(std::make_pair(id, std::shared_ptr<Form>(form))); //вызывает краш   
        sendNetworkPacket(pk);
    }
}

Вызывается вот так:

auto menu = new MenuForm("test", "text", vector<Button *>{
        new Button("button #1"),
        new Button("button #2")
});
player.sendForm(menu);
Answer 1

Решил проблему банальным переносом std::unordered_map в другой класс.

READ ALSO
как передать двумерный массив из array.cpp

как передать двумерный массив из array.cpp

Есть два файла Не считая хэйдера arrayh , в ней только одна строчка:

180
ошибка в логическом выражении

ошибка в логическом выражении

В блоке if ошибка, но я не могу ее найтиВот текст ошибки:

168
Проблема с JDBC

Проблема с JDBC

Здесь код, где я вставляю в данные базу данныхЗдесь структура базы данных:

175