我正在尝试从sf::RenderWindow
上的指针获取窗口大小,但是当我调用方法getSize()
时却遇到了分段错误:
sf::RenderWindow* winHandle;
void createHandle(sf::RenderWindow *rw, {...}){
winHandle = rw;
}
sf::Vector2i getWindowSize() const {
return static_cast<sf::Vector2i>(winHandle->getSize());
}
createHandle
在这里的作用就像一个构造函数,只是将winHandle的值设置为指向RenderWindow的指针。
更新: 经过一些研究和调试后,我确定我的问题是由于winHandle蜂鸣为null,但我仍然不明白为什么它会那样工作。
好吧,我有两个基本类UIHandle和UIElement,UIElement继承了UIHandle,其他任何UI元素都使用UIElement并释放了它的功能。
喜欢:
class UIHandle {
sf::RenderWindow* winHandle;
void createHandle({...});
{...}
};
class UIElement : public UIHandle {
void setHandle(UIHandle handle);
{...}
}
class anyOtherElement : public UIElement {
{...}
}
(发布可能有问题) 每个元素都以相同的方式工作(这意味着它具有句柄指针),但是由于某种原因,它不是UITitleBar
在main()中,首先创建一个Handle,然后将此句柄链接到每个元素:
sl::UIHandle testHandle;
testHandle.createHandle(&window, sf::Vector2i(0, 0), sf::Vector2f(800, 600));
testHandle.e = &e;
sl::TestButton buttonA("Test", 20, 20, 100, 20);
buttonA.setHandle(&testHandle);
sl::UIButton buttonB("Test", 60, 60, 100, 20);
buttonB.setHandle(&testHandle);
sl::UITitleBar TitleBar("Test titlebar");
TitleBar.setHandle(&testHandle);
哦,好吧,即使指针不是null,它仍然无法按预期工作并与其他UIElement导致段错误。
答案 0 :(得分:0)
我的建议是在尝试访问指针的内容之前检查指针是否为NULL。 winHandle可能为NULL或不是有效的指针。用您发布的代码很难知道确切的原因。
分段错误在许多情况下都会发生,如下所示。
您可以在堆栈溢出时使用此问题阅读更多有关分段错误的信息