【发布时间】:2020-02-18 01:51:43
【问题描述】:
当我尝试初始化一个具有指向其他类对象的类指针变量的类时,我得到分段错误。下面是示例代码sn-p。
我尝试先使用“new”关键字初始化变量以清空类,以及在分配之前手动使用 malloc,并尝试只分配变量而没有任何花哨的分配,但没有任何效果。
// Caller
void Application::run()
{
Network network(this);
network.start();
}
// Seg fault here, at the line that assigns window
Network::Network(Application *app)
{
application = new Application();
window = new sf::RenderWindow();
application = app;
window = app->window;
}
// Header for Network
class Network
{
public:
Application* application;
sf::RenderWindow* window;
// Functions
Network(Application *app);
void start();
void networkLoop();
private:
protected:
};
// Header for Application
class Application
{
public:
sf::RenderWindow* window;
Theme* theme;
// Functions
Application();
void run();
private:
protected:
};
// Main
#include "application.h"
#include <X11/Xlib.h>
int main()
{
XInitThreads();
Application* app;
app->run();
}
我对使用 C++ 还是很陌生,所以请原谅我有明显的内存错误。我已经尝试寻找解决方案,但我发现没有任何效果。我接受指向 Application 的指针作为构造函数的输入,因为我希望 RenderWindow 和 Application 的相同实例跨其他对象保持。
编辑:我觉得真的很愚蠢,但我将main() 更改为使用Application app 而不是Application* app 创建Application,它似乎已经修复了它。但仍然:有人可以解释为什么这有效而使用指针无效吗?
【问题讨论】:
-
在
Application::run()中它自己调用它,Network network(this)。 -
你问为什么在
main()中分配它而不是在Network中分配它? -
我很困惑为什么我必须在 main() 中使用
new,或者它可以只是没有指针的Application? -
@Ash 你应该很少需要
new。Application app;是干净的解决方案,Application中的sf::RenderWindow* window;也是如此,应该是sf::RenderWindow window;。而Network的构造函数中的两个new不应该存在。我不明白为什么Network首先有一个指向sf::RenderWindow的指针,而这可以通过application访问。 -
指针之类的东西是我永远无法理解的一个东西。谢谢大家的帮助!
标签: c++ pointers initialization sfml