Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
greenlight
 Аватар для greenlight
39 / 20 / 7
Регистрация: 23.01.2013
Сообщений: 104
Завершенные тесты: 1
#1

Динамическое выделение памяти - C++

23.01.2013, 09:00. Просмотров 276. Ответов 3
Метки нет (Все метки)

Здраствуйте.
Собственно сам код и вопрос: почему могу свободно выходить за границы массива?
Для чего тогда размерность указывается... Объясните пожалуйста.
C++
1
2
int* foo = new int[4];
cout << foo[5];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2013, 09:00     Динамическое выделение памяти
Посмотрите здесь:

Динамическое выделение памяти C++
C++ динамическое выделение памяти
C++ Динамическое выделение памяти
C++ Динамическое выделение памяти
Динамическое выделение памяти C++
C++ динамическое выделение памяти
C++ Динамическое выделение памяти
Динамическое выделение памяти C++
Динамическое выделение памяти C++
C++ Динамическое выделение памяти
C++ Динамическое выделение памяти
динамическое выделение памяти C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6221 / 3466 / 424
Регистрация: 29.11.2010
Сообщений: 9,177
23.01.2013, 09:22     Динамическое выделение памяти #2
greenlight, С++ такой язык, которому не свойственно поведение виндус с расспросами "А вы точно уверены?" Он предоставляет полную свободу программисту, даже позволяя выстрелить себе в ногу. Выход за рамки массива не контролируется.
Если так нужно прослеживать, то метод at stl контейнеров кидает исключение.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12512 / 7074 / 794
Регистрация: 27.09.2012
Сообщений: 17,466
Записей в блоге: 2
Завершенные тесты: 1
23.01.2013, 15:14     Динамическое выделение памяти #3
Цитата Сообщение от greenlight Посмотреть сообщение
Для чего тогда размерность указывается...
Чтобы запросить у системы необходимое количество памяти. Если система найдет такой свободный объем памяти, то память резервируется для запросившего приложения до тех пор, пока данную память не освободят.

Добавлено через 1 минуту
Цитата Сообщение от greenlight Посмотреть сообщение
Собственно сам код и вопрос: почему могу свободно выходить за границы массива?
Как уже написал MrGluck выход за пределы не контролируется на уровне языка.
SeaMonster
 Аватар для SeaMonster
15 / 15 / 0
Регистрация: 31.12.2012
Сообщений: 101
23.01.2013, 16:04     Динамическое выделение памяти #4
Ну да, c++ а особенно чистый Си - идеальный язык для "создания бомб". Скажем если написать
if(x=2){ тото делать} то это скомпилится, вот только он мигом Присвоит иксу указанное значение и код будет работать совсем не так как ожидалось. ( на всякий случай - правильно if(x==2){ тото делать} ДВА ЗНАКА равно )

Кстати. В том что ты написал как пример
C++
1
2
int* foo = new int[4];
cout << foo[5];
Выход будет и если написать foo[4]! Си - "нулевой" язык, и запись int[4] создает ячейки с номерами от НУЛЯ до ТРЕХ, а не от одного до четырех (как на некоторых языках)
Yandex
Объявления
23.01.2013, 16:04     Динамическое выделение памяти
Ответ Создать тему
Опции темы

Текущее время: 02:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru