Я работаю с пакетом SFML и получаю ошибку сегментации при попытке закрыть окно / программу. Я нашел строку в моем коде, которая приводит к ошибке сегментации, когда я пытаюсь уничтожить sf::Font
используется для рисования текста в окне SFML.
Линия просто:
delete button_font;
(который имеет тип sf::Font*
)
То, что я прочитал из документации SFML, sf::Font
У класса есть деструктор. Я также протестировал его сразу после определения объекта шрифта, он сам себя разрушил, как и ожидалось.
Шрифт загружается sf::Font::loadFromFile(~)
, Он используется в качестве аргумента в качестве ссылки в некоторых классах, используемых как игровые состояния и меню. Может ли быть проблемой, что он используется несколькими sf::Text
объекты, когда я пытаюсь удалить шрифт?
Указатели и динамическая память — одна из хитрых вещей в C ++. Есть много способов потерпеть неудачу, я думаю, что вы удалили указатель, который вы не создали с new
во-первых, или, может быть, вы удалили его дважды, потому что два объекта содержали указатель на него.
Пока там может быть хорошим решением для вашей прямой проблемы, то реальный Решение использует умный указатель.
Других решений пока нет …