Почему мой перегрузочный конструктор вызывает сбой? - PullRequest
0 голосов
/ 21 мая 2019

В основном, когда вызывается перегрузка оператора (operator--), конструктор моя программа падает, изменяя массивы классов с динамических на статические, решает проблему, почему так?

Если массивы классов изменяются с динамических на статические, перегрузка работает отлично, но это не решение, которое я ищу.

Рабочая версия со статическим массивом:

#include <iostream>
#include<string>
using namespace std;
const int TABLE = 10;

class Player()
{
private:
        int health;
        string A[TABLE][TABLE];
public:
      Player()
      {
         health = 17;
         for (int i = 0; i < TABLE; i++)
         {
             for (int j = 0; j < TABLE; j++)
                 A[i][j] = "-";
         }
      }
      Player(int new_health)
      {
             health = new_health;
      }
      Player operator--()
      {
             health--;
             return Player(health);
      }
      ~Player(){}
};

int main()
{
   Player p1; // Creates object p1 and calls Player(), initializing 
health variable, and string A array.
   --p1; // Decrements p1 health value
   return 0;
} 

Версия динамического массива:

#include <iostream>
#include<string>
using namespace std;
const int TABLE = 10;

class Player()
{
private:
        int health;
        string **A;
public:
      Player()
      {
         health = 17;
         A = new string*[TABLE];
         for (int i = 0; i < TABLE; i++)
         {
            A[i] = new string[TABLE];
         }
         for (int i = 0; i < TABLE; i++)
         {
             for (int j = 0; j < TABLE; j++)
                 A[i][j] = "-";
         }
      }
      Player(int new_health)
      {
             health = new_health;
      }
      Player operator--()
      {
            health--;
            return Player(health);
      }
      ~Player()
      {
            for (int i = 0; i < TABLE; i++)
                 delete[] A[i];
            delete[] A;
      }
};

int main()
{
    Player p1; // Creates object p1, calls Player(), set health value, 
initializes dynamic array
    --p1; // Produces a crash with exit status -1
    return 0;
}

Нет сообщений об ошибках, сбой не происходит при здоровье = new_health частично, он падает, как только конструктор Player (int new_health) его работа Как динамические массивы могут повлиять на перегрузку конструктора и вызвать сбой?

1 Ответ

0 голосов
/ 21 мая 2019

Ошибка возникает из-за того, что новый экземпляр плеера, который вы создаете в вашей - перегрузке, разрушается; однако ваша перегрузка конструктора никогда не инициализировала ваш динамический массив. Поэтому, когда вызывается деструктор, вы пытаетесь удалить нераспределенную память.

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