Почему я получаю «Invalid free () / delete / delete [] / reallo c ()» от valgrind? - PullRequest
0 голосов
/ 26 апреля 2020

Я довольно новичок в программировании и пытаюсь создать программу для игры в карточную игру «Сумасшедшие восьмерки» против компьютерного противника. Я получаю эту ошибку в своей функции, которая добавляет руки из колоды в руку игроков. Вот мой класс рук:

class Hand {
  private:
    Card* cards;
    int n_cards;  // Number of cards in the hand.
  public:
  // must have constructors, destructor, accessor methods, and mutator methods
Hand();
~Hand();
Hand(const Hand&);
Hand& operator= (const Hand&);
void set_cards(int n, Card card);
void set_n_cards(const int n_cards);
Card get_cards(int i);
int get_n_cards();
void increase_n_cards();
bool ifPlayable(int cardNum, Card& topPile);
void isEight(Card&);
void playCard(int index);
};

, а вот функция:

void Hand::set_cards(int n, Card card)
{
    Card** temp = &cards;
Card* new_hand = new Card[n_cards+1];

for(int i = 0; i < n_cards; i++)
{
new_hand[i].setCard((*temp)[i].getSuit(),(*temp)[i].getRank());

}

new_hand[n_cards].setCard(card.getSuit(),card.getRank());

delete[] *temp;
*temp = nullptr;
*temp = new_hand;
n_cards++;

}

Я очень смущен, так как раньше не сталкивался с этим типом ошибки сегмента и хотел бы немного Помогите. Кроме того, n_cards продолжает возвращаться к 0 после завершения функции. Есть идеи, почему это может происходить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...