Задать вопрос
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
  • Вопрос задан
  • 187 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Подсказка: вот то число, что у вас в конце выводится - это 2^64-1. Еще подсказка: size_t на современных платформах имеет размер 64 бита.

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

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

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

Похожие вопросы