2

我正在使用 SFML 包并在尝试关闭窗口/程序时收到分段错误。我在我的代码中找到了导致分段错误的行,这是当我尝试破坏sf::Font用于在 SFML 窗口中绘制文本的时候。

这条线很简单:

delete button_font;(这是类型sf::Font*

我从 SFML 文档中读到的,sf::Font该类确实有一个析构函数。我还在定义字体对象后立即对其进行了测试,它按预期自行破坏。

字体由sf::Font::loadFromFile(~). 在某些用作游戏状态和菜单的类中,它被用作引用参数。sf::Text当我尝试删除字体时,它被多个对象使用可能是一个问题吗?

4

1 回答 1

1

指针和动态内存是 C++ 中的棘手问题之一。失败的方法有很多,我的猜测是你删除了一个你一开始没有创建的指针,new或者你删除了它两次,因为两个对象持有一个指向它的指针。

虽然您的直接问题可能有一个很好的解决方案,但真正的解决方案是使用智能指针

于 2017-11-28T17:49:16.243 回答