c++ - 错误 : Thread 1: EXC_BAD_ACCESS (code=1, 地址=0x0)

标签 c++ xcode class

<分区>

class Card
{
private:
  int face;
  char suit;
public:
  Card();
  Card(char, int);
  int getRank() { return face; }
  char getSuit() { return suit; }
  void setFace(int cardFace) { face = cardFace; }
  void setSuit(char cardSuit) { suit = cardSuit; }
};
Card::Card(char cardSuit, int cardFace)
{
  face = cardFace;
  suit = cardSuit;
}

class Player
{  
public:
  Player();
  vector<Card>allCards;
  vector<Card>hand;   //holds 7 cards
};

Player::Player()
{
  std::random_device seed;
  std::mt19937 rng(seed());
  for (int i = 1; i <= 13; i++)
  {
      Card c1('D', i), c2('C', i), c3('H', i), c4('S', i);
      allCards.push_back(c1);
      allCards.push_back(c2);
      allCards.push_back(c3);
      allCards.push_back(c4);
  }
  shuffle(std::begin(allCards), std::end(allCards), rng);
      for (int x = 0; x < 7; x++) {
          hand[x] = allCards.back(); <---------- Error here
          allCards.pop_back();
      }
}

我正在尝试使用类创建游戏,有时我必须为每个玩家分配 7 张牌,这对我来说并不适用,我正在尝试管理它。

我收到以下错误

Error: Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

最佳答案

您忘记初始化hand vector 。默认情况下,它的大小为 0 并且访问 hand[x] 是越界的。

如果您知道它的大小不变,您可以在 Player 构造函数的初始化列表中初始化它的大小。

Player::Player() : hand(HAND_SIZE) {
   ...
}

或者您可以更改代码以使用 push_back(),因为 hand 是空的,除非以其他方式初始化。

hand.push_back(allCards.back());

关于c++ - 错误 : Thread 1: EXC_BAD_ACCESS (code=1, 地址=0x0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50404216/

相关文章:

c++ - 表达式树 printLevel() 函数

ios - 如何更改平板电脑上的 labelCount? (当有更多空间可用时)

python - 为什么从实例获取类属性会引发 AttributeError?

c++ - 将 vector 或 vector 的 vector 或...的 vector (你明白了)传递给函数

c++ - 在 C++ 中样板化 "cold/never_inline"错误处理技术的最佳方法是什么?

ios - AFNetworking:使用查询字符串获取

swift - 如何使用 indexpathforselectedrow 从结构数组中获取实例?

java - 类是否可以继承父类(super class)的注解

c# - 如何从另一个类访问 Winform 文本框控件?

C++ 范围 vs 手动 for 循环