Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/263: Рейтинг темы: голосов - 263, средняя оценка - 4.76
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

В чем разница между динамическим массивом и статическим?

07.01.2019, 11:59. Показов 58040. Ответов 220
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ребята, я не понимаю различия. вроде читал литературу.

ну вот говорят, что динамический массив, это массив выделение памяти под который будет происходит в процессе выполнения программы.

и тут я залез в онлайн компилятор (с++ 14) и сделал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(){
 
int n;
std::cin >> n;
int array[n]; // ну я создал посути динамический массив.
 
int *arr;
arr=new int[n]; // здесь тоже. 
return 0;
}
 
значит они оба динамические?
объясните пожалуйста в чем действительно разница между статическим и динамическим массивом, чтобы я мог точно понимать что есть что
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2019, 11:59
Ответы с готовыми решениями:

Разница между статическим и динамическим полиморфизмом
Добрый день Подскажите пожалуйста какая разница между статическим и динамическим полиморфизмом и пожалуйста на примере и virtual...

В чем разница между вектором и массивом
Я учу язык С/С++ и хотел у вас спросить в чем разница между вектором и массивом ? кроме тогдо что вектор создается vector<int> m; а...

В чем разница между обычным массивом и контейнером
В чем разница между обычным массивом и контейнером?

220
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 14:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Как раз для Си законно, он оперирует непрерывной моделью памяти, целиком доступной одному процессу.
Процессу доступна только та память, которая законным способом была выделена для его данных.
И фсёёёёёё.


Вы не можете прочитать какой нибудь рандомный адрес со словами:
"но мы же ничего не меняем, только читаем...",
и думать, что это безопасно.

На самом деле ,теоретически, вы можете наткнуться на адрес памяти,
который имеет защиту и от записи, и от чтения.
И словить access violation.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Access violation вызывается не программой, а операционкой.
И? К чему это было сказано?
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 14:14
Цитата Сообщение от eva2326 Посмотреть сообщение
Ещё, ожидаемо, что указатель:
int* pa =reinterpret_cast<int*>(a);
Будет указывать на первый элемент двух-мерного массива.
У меня это и написано.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.01.2019, 14:14
del
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 14:15
Цитата Сообщение от Croessmah Посмотреть сообщение
Зачем локальный?
видите разницу между формулировками?

с++17
returns a reference to an object of type charT with value charT()
и вашей:
Цитата Сообщение от Croessmah Посмотреть сообщение
the const version returns charT()
В вашем случае стандарт в буквальном смысле предписывает вернуть charT()
Не ссылку на объект, который имеет значение равное charT(),
а само charT()
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.01.2019, 14:17
Цитата Сообщение от eva2326 Посмотреть сообщение
В вашем случае стандарт в буквальном смысле предписывает вернуть
Со значением charT(), т.е. '\0' для char.
C++
1
2
static char last = charT();
return last;
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 14:35
Цитата Сообщение от Croessmah Посмотреть сообщение
Со значением charT(),
это с++17
Цитата Сообщение от eva2326 Посмотреть сообщение
with value charT()
в вашей же трактовке с++03 только charT()
часть фразы "with value" отсутствует.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,095
10.01.2019, 14:56
Цитата Сообщение от eva2326 Посмотреть сообщение
Процессу доступна только та память, которая законным способом была выделена для его данных.
И фсёёёёёё
А как же доступ к регистрам? А как же локальные переменные? Ничего из этого код не выделяет, но может пользоваться. Все эти выделения - освобождения нужны только в многозадачных системах, где необходимо разграничение доступа. Но С/С++ можно использовать и в контроллерах, а там доступ к любым устройствам осуществляется прямой записью по нужным адресам.
Цитата Сообщение от eva2326 Посмотреть сообщение
И? К чему это было сказано?
Повторяю: это не свойство языка. Это свойство операционки / процессора.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 15:16
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А как же доступ к регистрам? А как же локальные переменные?
Регистры/стек - это память, которая выделена процессу законным образом.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
в контроллерах, а там доступ к любым устройствам осуществляется прямой записью по нужным адресам.
По нужным, а не по любым.

Это не даёт вам право думать, что вы можете невозобранно шариться по всей памяти, как вам заблагорассудится.
При попытке доступа к ненужному адресу, вполне возможно,
что ваша кофеварка сгенерирует эксепшен.
И привет access violation

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Повторяю: это не свойство языка. Это свойство операционки / процессора.
И зачем вы это повторяете?
К чему вообще вы об этом упомянули?
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,095
10.01.2019, 16:23
Цитата Сообщение от eva2326 Посмотреть сообщение
Регистры/стек - это память, которая выделена процессу законным образом.
Кем выделена? Язык С не знает под какой операционкой он будет работать и будет ли она вообще. Собственно, в случае контроллеров так и есть: пользовательская программа запускается сразу при включении питания, без всяких операционных систем, BIOS'ов и прочего.
Цитата Сообщение от eva2326 Посмотреть сообщение
По нужным, а не по любым.
По нужным нужная периферия, по другим - другая. А может другие данные той же программы. Или стек, или еще что-то. Но на уровне языка Си все это - просто память. Обращаться можно к любой ячейке, стандарт этого не запрещает.
А уж что будет если эта ячейка имеет какой-то особый смысл на уровне железа - другой вопрос. В случае непривелигированного приложения на современных многозадачных системах будет прерывание PAGEFAULT, которое, между прочим, не обязательно приводит к вылету. Его можно отловить и проигнорировать. Оно штатно используется для работы подкачки на уровне операционной системы.
А в случае контроллеров никакого разграничения прав доступа нет физически, и запись в рандомную ячейку приведет только к непредсказуемому поведению. Например, изменятся настройки UART'а. Или поломается стек. Или произойдет сброс.
Цитата Сообщение от eva2326 Посмотреть сообщение
И привет access violation
Вот этого не будет точно. Младшие контроллеры такого физически не поддерживают.
Цитата Сообщение от eva2326 Посмотреть сообщение
И зачем вы это повторяете?
Вы написали "в Си обращение за пределы выделенной памяти - UB". Это не так. На уровне языка вообще нет ограничений по доступу к памяти.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
10.01.2019, 16:49
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы написали "в Си обращение за пределы выделенной памяти - UB". Это не так. На уровне языка вообще нет ограничений по доступу к памяти.
Ну как бы в стандартах C/C++ как раз таки и написано, что это UB. Это можно легко проверить, открыв любой из них.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,095
10.01.2019, 17:05
пруф?
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
10.01.2019, 17:10
Пруфы в стандарте. Покупаете его, открываете и ищете. За вас я делать это не собираюсь. Это базовые вещи, которые написаны в любом вменяемой учебнике по данным языкам.
2
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 17:12
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Кем выделена?
Кем то.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Язык С не знает под какой операционкой он будет
Так же - не принципиальный момент.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
По нужным нужная периферия, по другим - другая. А может другие данные той же программы. Или стек, или еще что-то. Но на уровне языка Си все это - просто память. Обращаться можно к любой ячейке,
Не к любой.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
стандарт этого не запрещает
Стандарт вообще никому ничего не запрещает.
Лишь трактует некоторые ситуации как UB.

Вылет за пределы диапазона массива, например.

Вы путаете понятия:
То, что технически, вы можете обратиться к данным по любому адресу,
не означает, что это можно делать.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Младшие контроллеры такого физически не поддерживают.
Суть UB заключается в том, что если какая нибудь младшая кофеварка не поддерживает эксепшены,
это не значит, что все хорошо, и можно невозобранно шариться где попало.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы написали "в Си обращение за пределы выделенной памяти - UB". Это не так. На уровне языка вообще нет ограничений по доступу к памяти.
Вы опять попутали понятия.
"нет ограничений" - не значит, что "поведение определено".

У вас есть указатель, который указывает на протухший объект.
Формально, такой указатель - невалидный.

Это - ситуация, когда и без всяких стандартов понятно:
невозможно предугадать поведение программы, зависящее от какого то случайного мусора.


Что бы окончательно прояснить ситуацию,
ещё раз прочтите кусочек диалога,
с которого начался этот разговор:

Цитата Сообщение от IGPIGP Посмотреть сообщение
пользуясь индексированием по указателю - мы имеем законное право пройти хоть всю память
Цитата Сообщение от eva2326 Посмотреть сообщение
Это не законно
Чужую память даже просто читать нельзя,
без риска нарваться на access violation
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 17:43
Цитата Сообщение от eva2326 Посмотреть сообщение
Хотите сказать, что с++03 предписывает возвращать ссылку на локальный объект? ))
Это же UB.
UB если это будешь делать ты.
Стандартная библиотека может делать всё что угодно и это не будет UB.
Более того, многие вещи из стандартной библиотеки нельзя написать на переносимом C++ либо вообще, либо без UB.
1
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 17:59
Цитата Сообщение от rat0r Посмотреть сообщение
многие вещи из стандартной библиотеки нельзя написать на переносимом C++ либо вообще, либо без UB.
приведите примеры таких вещей.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 18:08
Цитата Сообщение от eva2326 Посмотреть сообщение
приведите примеры таких вещей.
std::less для указателей, std::vector, std::complex, std::launder, offsetof.
Ну и конечно type_traits.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 19:10
глюк

Добавлено через 9 минут
Цитата Сообщение от rat0r Посмотреть сообщение
std::less
Реализовала

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        // TEMPLATE STRUCT less
template<class _Ty = void>
    struct less
    {   // functor for operator<
    typedef _Ty first_argument_type;
    typedef _Ty second_argument_type;
    typedef bool result_type;
 
    constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
        {   // apply operator< to operands
        return (_Left < _Right);
        }
    };
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 19:14
Цитата Сообщение от eva2326 Посмотреть сообщение
Реализовала
Нет.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
10.01.2019, 19:22
Цитата Сообщение от rat0r Посмотреть сообщение
Нет.
Да!
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
10.01.2019, 19:23
Цитата Сообщение от eva2326 Посмотреть сообщение
Да!
Докажи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2019, 19:23

В чем разница между массивом строк и List<string>?
А есть ли принципиальная разница между string array1 и List&lt;string&gt; array2 ? И если есть, то в чем она заключается?

Разница между статическим и экземплярным методом
В книге уже несколько раз встречается понятие статического и экземплярного метода, но не поясняется конкретно, в чем между ними разница,...

В чем разница между простым линейным списком, и динамическим линейным списком?
вопрос в теме

Разница между массивом структур и очередью
Поясните пожалуйста разницу между массивом структур и очередью.

VPN не подключается со статическим IP-адресом (ошибка 720), с динамическим — все работает
Всем привет! В магазине имеется VPN соединение подключающееся к серверу на складе. При получении ip-адреса автоматически подключение...


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

Или воспользуйтесь поиском по форуму:
160
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru