Это неопределенное поведение, поэтому может случиться что угодно. Компилятор может оптимизировать строку, вставить abort () или сделать что-нибудь еще.
Если компилятор не вносит больших изменений в код, а std::string
реализует оптимизацию коротких строк, тогда test[100]
получит доступ к кадру стека одной из функций, вызывающих main()
.
Эти функции отвечают за загрузку разделяемых библиотек, размещение переменных среды, создание глобальных объектов, таких как std::cout
, а также создание и передачу argc, argv, в main()
. Этот код заглядывает в стек этих функций. В системе с защитой памяти, такой как Linux или Windows, с достаточно удаленным доступом, приложение будет аварийно завершено.
Не полагайтесь на это, поскольку компилятор может сделать с ним что-то совершенно неожиданное.
И да, это может привести к эксплуатации. Если вне границ зависит от ввода пользователя, то этот пользователь может читать или записывать данные, которые он не должен был. Это один из способов распространения червя или вируса: они читают пароли или пишут код, который будет выполняться после возврата из функции.