Регистрация
22 Сен 2013
Сообщения
79
Репутация
1
Спасибо
0
Монет
0
Допустим я создаю динамический массив из 5 элементов
int *A = new int[5];

Почему в таком случае если я попытаюсь обратиться к 10 элементу и например вывести его на экран cout<<A[10] он его найдет и выведет какое то значение, а не выдаст ошибку? Получается, массив в таком случае автоматически возрастает до массива с 10 элементами?
 
Это место в памяти, тебе же дают какой-то кусок побольше который не лезет в другие области. Вот ошибки и нет, си позволяет гулять так. Массив не возрастает, при удалении delete[] A; ты удалишь память на 5 элементов но твой десятый не изменится. Или же через некоторое время этот десятый будет иметь другое значение, его займут... а ты будешь думать, что массив стал на 11 элементов
 
Компилятор просто отсчитывает десятое место для int с адреса начала массива, не проверяя, где он заканчивается. Это место обычно уже отведено для какой-то другой переменной, значение которой при записи туда затрется. C++ -язык для профессионалов, упор сделан на быстродействие программ, а проверка при обращении замедляла бы выполнение программы,
 
Назад
Сверху