Доступ к элементам за пределами массива приводит к неопределенному поведению .
Компиляторам не нужно делать что-то конкретное в таких гарантированных случаях Undefine Behavior.
И потенциально может произойти что-нибудь, ваша программа может аварийно завершить работу или не проявлять неправильное поведение, и это допускается Стандартом.
Ссылка:
C ++ Стандартный раздел 1.3.24 гласит:
Допустимое неопределенное поведение варьируется от полного игнорирования ситуации с непредсказуемыми результатами до поведения во время перевода или выполнения программы документированным образом, характерным для среды (с выдачей или без выдачи диагностического сообщения), до завершения перевода или выполнения с выдачей диагностического сообщения).
Ваше понимание new
неверно. new
позволяет вам выделить фиксированный объем памяти в свободном хранилище (куча a.k.a). Он не выделяет дополнительную память, если вы расширяете границы выделенной памяти. Это зависит от вас, чтобы убедиться, что вы должны выделить достаточно памяти, чтобы вы не выходили за пределы.
В вашей программе вы пытаетесь выделить память, равную 10 элементам массива, поэтому вы должны делать:
arrays = new int[10];
Кроме того, не забудьте позвонить delete[]
, как только вы закончите, используя выделенную память, или это приведет к утечке памяти.
delete []arrays;
Если вам нужна структура данных, которая автоматически увеличивается в соответствии с вашим использованием, C ++ предоставляет ее в виде std :: vector .