Это неопределенное поведение и полностью зависит от структуры виртуальной памяти, которую операционная система организовала для этого процесса. Как правило, вы можете:
- получить доступ к некоторому бреду, который принадлежит вашему виртуальному адресному пространству, но имеет бессмысленное значение, или
- попытка получить доступ к ограниченному адресу памяти, и в этом случае аппаратное обеспечение отображения памяти вызывает сбой страницы, и ОС решает, шлепать ли ваш процесс или выделить больше памяти.
Если someints
является массивом в стеке и является последней объявленной переменной, вы, скорее всего, получите некоторую тарабарщину от вершины стека или (очень маловероятно) вызовите ошибку страницы, которая может позволить ОС изменить размер стек или убить ваш процесс с SIGSEGV
.
Представьте, что вы объявляете один int
сразу после массива:
int someints[100];
int on_top_of_stack = 42;
std::cerr << someints[100] << std::endl;
Тогда, скорее всего, программа должна вывести 42
, если только компилятор каким-то образом не переставит порядок объявлений в стеке.