Ваша проблема может быть уменьшена до этого:
bool x;
std::cout << x;
Логическое значение является фундаментальным типом. По умолчанию инициализирующие автоматические переменные фундаментального типа оставляют их с неопределенными значениями. Не false
, но неопределенный. Использование этих значений приводит к неопределенному поведению. Это то, что вы видите.
Причина, по которой вы видите случайные значения, заключается в том, что «за кулисами» логический тип является целочисленным типом, для которого компилятор применяет только два значения. Но если вы не инициализируете его подробно, вы получите любой случайный мусор из этой памяти.
Решение состоит в том, чтобы явно инициализировать значение ваших переменных. Для массива это будет выглядеть так:
bool x[101010]{};
Это будет рекурсивно инициализировать значение каждого элемента массива, а для инициализации значения bool
действительно , чтобы установить его на false
.