指针的C++向量,传递过多?

指针的C++向量,传递过多?,c++,model-view-controller,class,polymorphism,containers,C++,Model View Controller,Class,Polymorphism,Containers,几个小时以来,我一直在想如何解决这个seg故障问题 我有一个C++游戏,四个玩家。玩家基类可以是计算机或人类派生的类。为了存储它们,我有另一个名为playerContainer的类,它有自己的函数,并使用播放器指针的私有成员向量 std::vector<Player*> players_; 其中,add是: void playerContainer::add(Player* newPlayer) { players_.push_back(newPlayer); } 然后我有

几个小时以来,我一直在想如何解决这个seg故障问题

我有一个C++游戏,四个玩家。玩家基类可以是计算机或人类派生的类。为了存储它们,我有另一个名为playerContainer的类,它有自己的函数,并使用播放器指针的私有成员向量

std::vector<Player*> players_;
其中,add是:

void playerContainer::add(Player* newPlayer) {
   players_.push_back(newPlayer);
}
然后我有一个名为gameLogic的类,它有一个私有成员playerContainer,执行播放器初始化以及其他一些操作

然而,在尝试将seg合并到MVC实现中之后,我遇到了seg故障

在GUI上,单击按钮开始游戏。该按钮调用窗口的startName函数,该函数收集参数,然后调用其私有成员模型类的startName,然后调用其私有成员gameLogic的initializePlayer函数,然后调用其私有成员playerContainer的add函数。此时程序将中断

在一些测试中,我发现如果我保存一个步骤,它就不会出现seg故障。例如,如果我给窗口对象一个gameLogic对象,然后调用它的initializePlayer函数等等,程序将正常运行,不会出错

我确信有一个比组合模型类和游戏逻辑类更好的解决方案,因为它们已经非常臃肿了。谁能提供一些见解

此外,如果这有点令人困惑,请让我澄清。我尽了最大努力解释清楚,但由于涉及到这么多不同的课程,所以很难做到这一点

编辑:不能尝试用int替换Player*,代码太大了,我无法及时完成

我试过valgrind,但原木很大,通常没有帮助。或者至少,我不太明白。对于那些想看的人,这里有一个scribd链接:

seg故障在playerContainer的add(添加)功能的push_back(推送)线路上出现


我将尝试调试…

在调用initializePlayer之前,您确定您的模型在某个地方实际分配了playerContainer吗

如果在向量中不使用Player*,而只使用int,会发生什么。注释掉任何直接使用Player*并运行的代码将显示您是否使用未初始化的播放机,或者问题是否在其他地方。如果您在受支持的平台上,请通过valgrind运行程序。请显示更多代码。e、 g.如何在实现中使用添加的播放器。如何释放指针等…我认为您应该开始查找分段错误出现的位置通过调试器运行程序,当您到达SEGFULT时,进行回溯跟踪,不仅显示SEGFULT出现的位置,还显示SEGFULT发生时堆栈的状态。然后,您可以返回堆栈,查看执行了哪些函数和调用。。。这将有助于你确定断层的位置。不,我不能说我完全确定。不管出于什么原因,使用向窗口添加gameLogic对象的确切语法都可以让一切正常。我不理解如何使用窗口和如何使用模型之间的区别。如果没有更多的代码,这很难区分。如何声明和分配playerContainer,以及如何访问它?playerContainer使用隐式构造函数,只有一个私有成员std::vector。通过重载的[]运算符访问其成员,该运算符返回players_i。创建playerContainer本身只是作为gameLogic的私有成员完成的,gameLogic的主要功能是:类gameLogic{private:playerContainer container;}
void playerContainer::add(Player* newPlayer) {
   players_.push_back(newPlayer);
}