访问向量

时间:2018-04-08 08:51:45

标签: c++ vector crash

我目前正在尝试解决一个问题,即访问矢量的第一个元素会导致我的应用程序崩溃。

这只是代码的演示,而不是实际的代码。

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;

0 个答案:

没有答案