«Неопределенное поведение» означает, что может произойти все что угодно.Это также включает в себя то, что разные вещи могут происходить при каждом запуске программы.
Например, если вы используете неинициализированную память, она может отличаться от запуска программы к запуску программы, что именно содержит эта память.
Простой пример:
int main() {
char s[1024];
s[1023] = '\0';
std::cout << s << std::endl;
}
Обычно при каждом запуске будет выводиться новая строка.Он не использует никаких распределений кучи, и я не думаю, что это даже какое-то неопределенное поведение, так что, вероятно, это не намеченное решение вашего вопроса.
Другой пример: new
может возвращать разные адреса напри каждом запуске программы (здесь также нет UB):
int main(void) {
std::cout << new int << std::endl;
}
Таким образом, даже без неопределенного поведения существуют источники «случайности», поэтому, безусловно, также с неопределенным поведением могут происходить разные вещи в каждой программебежать.