Dyikot
@Dyikot

Баг цикла или как это объяснить?

По непонятной мне причине цикл для последней фигуры (делаю тетрис) делает 1 лишний заход и тем самым вызывая ислючение что типо зашло за граница вектора...
Вот код и чтобы было видно я вывожу номера строк которые занимает фигура:
for(size_t row = lowestRow; row >= highestRow; row--)
{
	std::cout << row << " ";
	if(isRowFull(row))
	{
		fullRowsIndexes.push_back(row);
	}
}

std::cout << "\n";

66b1e9cf724ba421662631.png
66b1e9d844dbb912025204.png
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Подсказка: вот то число, что у вас в конце выводится - это 2^64-1. Еще подсказка: size_t на современных платформах имеет размер 64 бита.

У вас переполнение. Вы там из 0 вычитаете 1 в итерации цикла, получаете самое большое число, представимое в 64-битном типе.

Надо переписать цикл на while и делать из него break по достижению 0. Или тип переменной сменить на знаковый.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы