从指针调用方法时出现分段错误

时间:2019-09-24 14:01:22

标签: c++ sfml

我正在尝试从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导致段错误。

1 个答案:

答案 0 :(得分:0)

我的建议是在尝试访问指针的内容之前检查指针是否为NULL。 winHandle可能为NULL或不是有效的指针。用您发布的代码很难知道确切的原因。

分段错误在许多情况下都会发生,如下所示。

  1. 当指针为NULL时
  2. 当您尝试更改只读存储器的内容时​​
  3. 当您尝试使用悬空指针时

您可以在堆栈溢出时使用此问题阅读更多有关分段错误的信息

What is a segmentation fault?

相关问题