массивы — c ++ назначение значений объекта из другого объекта завершается неудачно

У меня есть некоторые серьезные проблемы с моим кодом в настоящее время, и я надеюсь, что кто-то может пролить свет на это.

В моем коде я сделал; игроки = новый игрок * [2]; вместе с игроками [i] = новый игрок (); в цикле. И дали им реальные ценности.

Позже в моем коде я хочу сделать это:

players[0] = players[1];
delete players[1];

Пока отлаживаю. Players [0] получает значения игроков [1]. Но в следующую очередь игроки [0] получают; имя строки = < Bad Ptr> и вместе с некоторыми значениями int, которые становятся -17912312.

Сначала я подумал, что мне нужно создать оператор = så в Player. Я создал:

Player& operator=(const Player& right);

Player& Player::operator=(const Player& right)
{
this->name=right.name;
this->coins=right.coins;
this->bet=right.bet;
return *this;
}

Это не имело никакого эффекта. Это даже не входит в функцию. Почему я не могу присвоить значения?

0

Решение

в показанном коде players[0] = players[1]; будет вытекать объект, первоначально указанный players[0], И в следующем выражении вы уничтожаете объект за одним указателем, который у вас теперь есть в обоих слотах. Если вы не установите его в NULL немедленно, вы держите висячие указатели, которые ни к чему не пригодны.

Написание op = не имеет никакого отношения к делу, и вы не должны этого делать.

0

Другие решения

Это проблема с висящим указателем. Когда вы делаете назначение

players[0] = players[1];

И сразу после удаления игроков [1] вы фактически делаете недоступными обе области памяти. Не могли бы вы объяснить свою цель немного лучше? Как уже было сказано, вы не можете сделать перегрузку оператора для указателей. Почему вам нужно удалить игроков [1] в первую очередь? Буду редактировать с обновленными советами, когда уточнить

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector