Для массива (или любого объекта), объявленного внутри функции, память выделяется при входе в функцию (обычно в стеке) и освобождается при возврате функции. Тот факт, что в данном случае функция main
, на это не влияет.
Это:
cin >> arraySize;
int arr[arraySize];
- это «массив переменной длины» (VLA). Дело в том, что C ++ не поддерживает VLA. C делает, начиная со стандарта ISO C 1999 года (C99), но это не та особенность, которую принял C ++.
Ваш компилятор поддерживает VLA в C ++ в качестве расширения. Их использование делает ваш код непереносимым.
(Одна из проблем с VLA заключается в том, что нет механизма обнаружения ошибки выделения; если arraySize
слишком велико, поведение программы не определено).
Для gcc компиляция с -pedantic
выдаст предупреждение:
warning: ISO C++ forbids variable length array ‘arr’