我目前正在尝试解决一个问题,即访问矢量的第一个元素会导致我的应用程序崩溃。
这只是代码的演示,而不是实际的代码。
class Group
{
public:
Player* get_first_player();
private:
std::vector<Player*> players;
}
这是班级的实施:
Player* Group::get_first_player()
{
if (players.size() > 0)
return players[0];
else
return nullptr;
}
这是一个调用演示:
Player* p = myGroup->get_first_player();
if (p != nullptr)
...
现在实际问题:程序在“返回玩家[0]”行上崩溃。但是,只有在我的应用程序全天运行后(有时它在4小时后崩溃,有时在10小时后),它在执行此行时不会始终崩溃。 我可以想象两件事:矢量以某种方式损坏,或者我进行调用的组对象无效。但如果是后者,那么为什么不能让player.size()失败才能进入回归球员[0]?
如果有人对此感兴趣,这里是编译器生成的实际代码,并用IDA反汇编:
v7 = *(_DWORD *)myGroup;
if ( (*(_DWORD *)(myGroup + 4) - *(_DWORD *)myGroup) >> 2 )
ret = *(_DWORD *)v7;
else
ret = 0;