Я начал писать простую консольную игру Yahtzee для практики. У меня просто вопрос о том, будет ли эта функция утечка памяти. Функция roll вызывается каждый раз, когда кубики необходимо повторно прокатывать.C++ будет ли эта функция протекать?
Он создает динамический массив. В первый раз он будет использовать 5 случайных значений. Для следующего прогона он будет только повторно свертывать все, за исключением костей, которые вы хотите сохранить. У меня есть еще одна функция для этого, но так как это не относится к этому вопросу, который я оставил его
Основная функция
int *kast = NULL; //rolled dice
int *keep_dice = NULL; //which dice to re-roll or keep
kast = roll(kast, keep_dice);
delete[] kast;
и вот функция
int *roll(int *dice, int *keep) {
srand((unsigned)time(0));
int *arr = new int[DICE];
if(!dice)
{
for(int i=0;i<DICE;i++)
{
arr[i] = (rand()%6)+1;
cout << arr[i] << " ";
}
}
else
{
for(int i=0;i<DICE;i++)
{
if(!keep[i])
{
dice[i] = (rand()%6)+1;
cout << "Change ";
}
else
{
keep[i] = 0;
cout << "Keep ";
}
}
cout << endl;
delete[] arr;
arr = NULL;
arr = dice;
}
return arr;
}
Кто-нибудь сказал вам всегда назначать NULL указателям после их удаления? Они ошибаются. –
'arr = NULL; arr = dice; 'Скорее избыточно. :] Если вы построите хотя бы первый уровень оптимизации, эта строка не будет существовать в скомпилированном выпуске. ('arr = NULL;') – GManNickG
@Steve: Я помню, как читал об этом в книгах. Что не так? Я думал, что это просто по соображениям безопасности. – jasonline