我有一个班级Game
和一个结构NamedGame
。 NamedGame
有两个成员变量,如下所示:
struct NamedGame {
Game game;
std::string name;
};
然后我有一个vector
NamedGames
:
std::vector<NamedGame> games;
指针应指向当前活动的游戏:
Game *currentGame;
现在,当我尝试指向向量NamedGame
中的最后一个games
时,如下所示:
*currentGame = games.back().game;
导致分段错误。我做错了什么,为什么这是错的?我非常感谢所有的帮助!
#include <vector>
#include <string>
struct Game {};
struct NamedGame {
Game game;
std::string name;
};
int main() {
std::vector<NamedGame> games;
Game *currentGame;
*currentGame = games.back().game;
}
答案 0 :(得分:4)
在这里,您尝试在未初始化指针currentGame
时使用它:
*currentGame = games.back().game;
您必须将此行更改为:
currentGame = &(games.back().game);
答案 1 :(得分:0)
根据我的经验,seg错误几乎总是由于取消引用空指针。正如马哈茂德所指出的那样,罪魁祸首很可能是由于以下几行:
*currentGame = games.back().game;
currentGame
尚未初始化的位置。存储games.back().game
的引用有效,但你也应该问&#34;为什么我首先使用指针?&#34;如果您正在尝试提升性能或减少使用指针所用的空间,为什么不执行以下操作:
#include <vector>
#include <string>
struct Game {};
struct NamedGame
{
Game *game;
std::string name;
};
int main()
{
std::vector<NamedGame> games;
Game *currentGame
//Code to initialize NamedGames and push them onto games
if (NULL != games.back().game)
{
currentGame = games.back().game;
}
}
这样,您仍在使用指针,但您也是这样做的,以便开发人员在解除引用之前应该验证Game
不是NULL
。
但是,如果您仅使用指针&#34;为了好玩&#34;,我建议您将currentGame
设为Game
而不是Game *
,以避免使用指针在一起。如果你走这条路线,我还建议重载Game
的赋值运算符,具体取决于你对currentGame
变量的处理方式。