Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V1057. Pseudo random sequence is the...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V1057. Pseudo random sequence is the same at every program run. Consider assigning the seed to a value not known at compile-time.

08 Май 2020

Анализатор обнаружил подозрительный код, инициализирующий генератор псевдослучайных чисел константным значением.

// C
srand(0);
// C++
std::mt19937 engine(1);

Числа, сгенерированные таким генератором, можно предугадать, либо же они будут воспроизводиться снова и снова при каждом запуске программы.

Чтобы этого избежать, стоит использовать какое-либо случайное число. К примеру, можно воспользоваться текущим системным временем:

srand(time(0));

Но такой подход может вызвать проблемы в многопоточных программах – 'time(0)' может вернуть одинаковые значения в разных потоках. Также стоит учесть, что время может меняться пользователем.

Начиная с C++11, можно воспользоваться генератором 'std::random_device', реализующим интерфейс к генератору истинно случайных чисел:

std::random_device rd;
std::mt19937 engine(rd());

Однако если таковой в системе отсутствует, то будет использован обычный генератор псевдослучайных чисел.

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки некорректного использования системных процедур и интерфейсов, связанных с обеспечением информационной безопасности (шифрования, разграничения доступа и пр.).

Данная диагностика классифицируется как: