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

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

07.01.2019, 11:59. Показов 58001. Ответов 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
09.01.2019, 19:40
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от rat0r Посмотреть сообщение
Если в стандарте просто ничего явно не сказано, то это тоже считается UB. Так что презумпция невиновности тут не работает

Стандарт однозначно даёт определение неопределенного поведения.
Согласно этому определению, код, который не совершает противоправных действий - не содержит UB.
А значит презумпция невиновности имеет место быть.
Все просто: в представленном коде нет никаких противоправных действий.
И вы не сможете доказать обратное.
Так что это не я, это вы попробуйте предоставить мне пруф некорректности кода.



Цитата Сообщение от rat0r Посмотреть сообщение
Читай документ по своей ссылке внимательнее.
Так бывает, когда сказать по существу нечего.

Легко сказать: "выход за пределы диапазона"

Объяснить: где конкретно, и почему (с пруфами, разумеется) - это сложно.
Проще сказать: "читай документ".

Цитата Сообщение от rat0r Посмотреть сообщение
Бессмысленное утверждение с т.з. стандарта.
11.3.4 Arrays
An object of array type contains a contiguously allocated non-empty set of N subobjects of type T.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
09.01.2019, 19:49
Цитата Сообщение от IGPIGP Посмотреть сообщение
как мы помним адресная арифметика вся построена на размере типа
Что такое "адресная арифметика"? Если это то, что описывает результат прибавления числа к указателю и вычитания двух указателей (https://timsong-cpp.github.io/... expr.add#4, https://timsong-cpp.github.io/... expr.add#5), то память подводит, т.к. там ни слова о размере типа.
Или имеется в виду что-то другое?
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть, захватив адрес элемента с нулевыми (всеми без исключения, опять-же) индексами, можно легко пробежать все элементы последовательно.
Если в предыдущих рассуждениях ещё можно было согласиться, что там что-то из чего-то следует, тот тут нельзя.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Если в стандарте сказано иное, то люди которые его пишут (или толкуют), размещены в памяти д'UB'овым случайным образом.
Очередной "гений" с единственно верным взглядом на мир, а стандартизаторы — идиоты?

Добавлено через 5 минут
Цитата Сообщение от eva2326 Посмотреть сообщение
Так бывает, когда сказать по существу нечего.
Да. Начинается демагогия типа отсылок к презумпции невиновности.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.01.2019, 19:58
Цитата Сообщение от rat0r Посмотреть сообщение
то память подводит, т.к. там ни слова о размере типа.
Подводит. И не только память. И это мягко сказано.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
09.01.2019, 20:00
Цитата Сообщение от eva2326 Посмотреть сообщение
А значит презумпция невиновности имеет место быть.
Презумпция невиновности — это такое понятие из уголовного права. Что такое презумпция невиновности определено в УПК (http://www.consultant.ru/docum... 08316c8f9/ например).
UB в коде не является уголовным преступлением. Так что отсылки к презумпции невиновности это просто способ слиться без ущерба для самооценки.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.01.2019, 20:12
eva2326, та философия которой пронизаны книги Б. Страуструпа, где всё что не запрещено, - разрешено, это неудачный способ аргументации. Тут и бульдозер не поможет.
Посмотрите в личку rat0r, там Croessmah здорово порезвился с минусованием.
Croessmah, помните Саша, я был против минусовых отзывов? Это исключительно, жизненный опыт. Нормальному человеку не нужны такие бичевания, а не нормальному они не помогут. Так что, лишний раз убеждаюсь, что порой простой бан от администрации - нормальное действо. Очень редко, но незаменимо. Для того кто:
Цитата Сообщение от rat0r Посмотреть сообщение
Очередной "гений" с единственно верным взглядом на мир
Во всяком случае почистить это надо. eva2326, мы кормим тролля. Тема очень жирная, и хоть как тупо он не выглядит а рейтинг цитирования его растёт. Давайте подождём пока всё не исправится. Иначе только хуже всё выходит.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
09.01.2019, 20:15

Не по теме:

IGPIGP, тебе не лень свою драгоценную энергию в никуда сливать?

0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
09.01.2019, 20:28
Цитата Сообщение от IGPIGP Посмотреть сообщение
всё что не запрещено, - разрешено, это неудачный способ аргументации
Абсолютно согласен. Поэтому утверждать, что "UB нет, пока это не доказано" — это неправильно. Запрещено всё, что не разрешено.

Цитата Сообщение от IGPIGP Посмотреть сообщение
там Croessmah здорово порезвился с минусованием.
Ага. В том числе за намёки, что "немодифицируемость массивов" — это бессмысленное утверждение в стандарте.

Как было справедливо отмечено в этом треде
Цитата Сообщение от DrOffset Посмотреть сообщение
В ранних версиях стандарта С++, была заметка, что массив - неизменяемый lvalue, но похоже, что она была неверна все это время. Теперь там только ссылка на правила преобразования
Ну и о чём эти минусы или обвинения в троллинге и взывания к модераторам в итоге говорят? Об отсутствии аргументов у минусующей/взывающей стороны и нежелании признавать свою неправоту. Только и всего.
0
 Аватар для eva2326
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
09.01.2019, 20:34
Цитата Сообщение от rat0r Посмотреть сообщение
Да. Начинается демагогия типа отсылок к презумпции невиновности.
Демагогия начинается, когда балбес заявляет: "в коде UB"
Но где именно, и почему - объяснить не может.

Цитата Сообщение от rat0r Посмотреть сообщение
Так что отсылки к презумпции невиновности это просто способ слиться без ущерба для самооценки.
Какое то не очень серьёзное заявление.
Может это у вас там где-то в детском садике что-то такое практикуют.

В мире взрослых людей, обычно человек в состоянии обосновать свои утверждения.
1
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
09.01.2019, 20:41
Цитата Сообщение от eva2326 Посмотреть сообщение
В мире взрослых людей, обычно человек в состоянии обосновать свои утверждения.
Определение "неопределённого поведения" видела? "behavior for which this document imposes no requirements". Как можно обосновать отсутствие требований в стандарте? Могу поступить как ты — предъявить ссылку и сказать "тут нет требований к поведению данного кода". Только так можно.

Отсутствие чего-то доказать нельзя. Можно доказать наличие, предъявив это что-то. Вот я предлагаю предъявить конкретное описание поведения кода, если оно есть.
Начать можете с reinterpret_cast-а двумерного массива к int*. Думаю, некоторых ждут увлекательные открытия при чтении соответствующих пунктов в стандарте.
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
09.01.2019, 20:45
rat0r, приведите в пример хоть одну реально используюмую реализацию и платформу, где это не будет работать.
В коде всегда есть место неопределенному поведению и если это поведение соответствует ожидаемому, то с точки зрения разработки его можно считать вполне определенным. А стандарты - они скользкие.
1
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
09.01.2019, 21:05
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
В коде всегда есть место неопределенному поведению
Так проблема в том, что кто-то считает, что в коде нет неопределённого поведения.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
09.01.2019, 21:40
Я чего то понять не могу...
Объясните и мне, пожалуйста.

Насколько я понимаю rat0r говорит что выход за пределы массива это UB.
Если я верно понял суть спора, то почему некоторые не согласны?

Добавлено через 56 секунд
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
В коде всегда есть место неопределенному поведению и если это поведение соответствует ожидаемому, то с точки зрения разработки его можно считать вполне определенным.
Если в коде есть место неопределенному поведению то программа фактически не валидная.

Добавлено через 44 секунды
То есть вы предлагаете забить на стандарт и лепить что попало?
Или вы как то избирательно действуете?
Вот это UB можно, а то нельзя?
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
09.01.2019, 21:41
Цитата Сообщение от Undisputed Посмотреть сообщение
Если я верно понял суть спора, то почему некоторые не согласны?
Они не видят, где там выход за границу массива
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.01.2019, 21:52
Цитата Сообщение от Undisputed Посмотреть сообщение
Я чего то понять не могу...
Интересно, что Вы поняли, где имеет место
Цитата Сообщение от Undisputed Посмотреть сообщение
выход за пределы массива
Подскажите, а то мы все упрели слушая UB'ойное вещание с намёками и восклицаниями, что если в коде прямо не отражено отсутствие UB, то его присутствие там гарантировано по определению. Тут имеет место выход за границы разумного. При чём, уверенный и глубокий.
Undisputed, может там и правда есть выход за пределы массива? Запостите пожалуйста, тот код и покажите, где именно, он Вами обнаружен, .
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.01.2019, 21:54
Цитата Сообщение от Undisputed Посмотреть сообщение
Если в коде есть место неопределенному поведению то программа фактически не валидная.
Невалидная с точки зрения абстрактной машины C++.
Иногда это имеет последствия применительно к конкретной реализации, а иногда нет.
И надо заметить, что было достаточно примеров, когда формальное UB в отсутствие препятствий с т.з. реализации переставало быть таковым в более поздних версиях спецификации языка. Естественно, лепить что попало не надо, но программист - это не религиозный деятель. Это теория помогает ему решать задачи, а не его задачи решаются во имя теории. Надеюсь, суть ясна

Цитата Сообщение от Undisputed Посмотреть сообщение
почему некоторые не согласны?
Просто спора нет. Есть разговор об одном и том же явлении, но с разных уровней абстракции.
Можно на форуме найти и другие примеры таких разговоров, например применительно к ссылкам - с одной стороны говорят - ссылка это константный указатель, т.к. его нельзя реализовать иначе, а с другой, что ссылка - это псевдоним объекта.
И пока они не договорятся о точках зрения, то так и будет наполовину пустой стакан, против наполовину полного.

Я ж тебе не зря написал вот этот пост. Он как раз об этом, о точке зрения.
0
09.01.2019, 21:57

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
И надо заметить, что было достаточно примеров, когда формальное UB в отсутствие препятствий с т.з. реализации переставало быть таковым в более поздних версиях спецификации языка.
Можно примеры? Просто любопытно. Сходу пока только 1 такой случай вспомнился.

0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
09.01.2019, 22:26
Цитата Сообщение от Undisputed Посмотреть сообщение
Если в коде есть место неопределенному поведению то программа фактически не валидная.
А Вы знаете хоть одну реализацию компилятора, которая бы на 100% соответствовала стандарту, не содержала багов и других сюрпризов?
А раз реализация не полностью соответствует стандарту, то стоит ли полагаться только на стандарт?
Цитата Сообщение от Undisputed Посмотреть сообщение
Вот это UB можно, а то нельзя?
Именно так. Стандарт желает дать максимум возможностей, поэтому не может гарантировать одинаковое поведение в ряде случаев.
Однако, зачастую, разработчик хорошо знает платформу для которой пишет, и знает как будет работать тот или иной фрагмент кода на целевых платформах, поэтому может использовать средства не соответствующие стандарту. И это вполне нормально.
1
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.01.2019, 22:42
Цитата Сообщение от rat0r Посмотреть сообщение
Можно примеры? Просто любопытно. Сходу пока только 1 такой случай вспомнился.
Ну вот здесь есть довольно показательный пример, как мне кажется.
Еще можно вспомнить любимое в POSIX преобразование указателей на функции в void * и обратно, начиная C++11 (если не ошибаюсь) это законно implementation defined behavior, а не undefined, как было ранее.
Можно вспомнить еще в целом модель многопоточности, которая ранними стандартами вообще не описывалась, а значит все ее применение было разновидностью UB.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
09.01.2019, 22:43
Цитата Сообщение от DrOffset Посмотреть сообщение
Невалидная с точки зрения абстрактной машины C++.
Ну да. Весь стандарт на эту абстрактную машину вроде как и завязан
Цитата Сообщение от DrOffset Посмотреть сообщение
Я ж тебе не зря написал вот этот пост. Он как раз об этом, о точке зрения.
Ага. И я с тобой в этом плане согласен
Мы не можем приводить в доказательство детали конкретной реализации, если говорим о языке - это разные уровни абстракции.
Но тут как раз таки пытаются приводить доказательства исходя из поведения конкретной машины а надо же по стандарту иначе речь вообще не о С++...

Цитата Сообщение от IGPIGP Посмотреть сообщение
Запостите пожалуйста, тот код и покажите, где именно, он Вами обнаружен, .
В чем разница между динамическим массивом и статическим?
Я про этот код... Насколько я понял вы парируете тем, что не обращаетесь от имени массива к данным а от имени дополнительного указателя и так как все элементы смежны - мы находимся в пределах памяти выделенной под двумерный массив и поэтому все ок, я верно понял вашу позицию?

Мое мнение по этому вопросу:
У вас есть двумерный массив 3х3. То есть обращаясь к двумерному массиву вида
C++
1
int a[][3] ={{1,2,3}, {4,5,6}, {7,8,9}};
Вы имеете право обращаться к a[0], a[1] и a[2] но не более (лично я не нашел ничего о дозволенности подобного. Если вы нашли - прошу поделиться).

Даже несмотря на то, что вы делаете это от имени вспомогательного указателя, это не отменяет тот факт что фактический объект лежащий в памяти по адресу int * pa =reinterpret_cast<int*>(a); это тот самый двумерный массив 3х3, первый оператор идексации которого может быть в диапазоне 0-2. Даже если отложить понятие "объект в памяти" в сторону, тогда вам наверное нужно привести ссылку на стандарт где подобный обходной путь допустим... Но если такого нет - значит это UB, то есть не определено что будет. А получение ожидаемого результата != корректная программа С++.

Поправьте, если ошибаюсь...
1
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
09.01.2019, 22:43
Ладно. Я соврал. Там нет выхода за границы. UB наступает раньше, чем происходит выход за границы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.01.2019, 22:43

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
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
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru