@@UFO26, размер динамического массива не узнаётся , а устанавливается в ходе исполнения кода в зависимости от использованного алгоритма , к примеру : const uint16_t MAX_SIZE = 65535; uint8_t WidthLine =137 ; for (uint16_t size = WidthLine ; size < (MAX_SIZE - WidthLine); size = size + WidthLine) { int * arr = now int [size] ; for (... дальше как в ролике... } Итак : наш size изначально имеет размер 137 , и в ходе исполнения шагов кода каждый раз увеличивается на число из переменной WidthLine =137 , и уже никогда не превысит 65 535 (я вычитаю WidthLine из MAX_SIZE , чтобы не случилось переполнения , ибо MAX_SIZE может быть не кратно WidthLine). Но при желании , и MAX_SIZE можно сделать не константой а переменной, куда операционка будет вкладывать значение допустимой длины непрерывной свободной области памяти .
Открою небольшую тайну, есть куча бесплатного качественного материала по изучению программированию. Книги хорошо подходят, но не для всех. Бесплатные курсы, абсолютно всем подходят. А видосов на ютубе и не только, вагон и маленькая тележка, при чем только русскоязычных,а сколько же на английском, представить сложно
спасибо большое за детальное объяснение! многие упускают всякие детали, когда объясняют, думая, что человек сам знает, что это, а вы прям и ссылки даете на нужные свои старые ролики, чтобы проследить логику уроков, если не понятно, и объясняете кратко, что дает возможность освежить старое, в общем. СПАСИБО ВАМ!!!
Сергей здравствуйте, я всегда думал что видео контент в сферах науки, это скорей кусок дерьма чем источник познавательности, люблю книги (хотя сложно даются), но когда я наткнулся на Ваш канал, он изменил всё представления об видео уроках, повторяю сейчас с++, много положительных эмоций Вы мне дали, спасибо что Вы есть, огромное Вам человеческое спасибо!!!!!!!счастья Вам и процветания.
Чем больше я учусь те больше понимаю что програмирование это командное дело . Спасибо и это фудоментальное добро вы делаеете как для языка так и для милионов людей кто то из них может что то сконструирует и а основы были истоки на вашем канале огромное Спасибо. За свет оброзования . За вдохновение и детали програмирование это командная деятельность . Репост это меньшее что я могу зделать .
И пару недель назад начал смотреть только твой канал от начала до середины (пока что), зная что лучшего для меня не сыскать, значительно многие уроки я уже запоминаю с одного просмотра, а то что нет смотрю снова ведь искать ответы у других это нереально, реальнее смотреть видео снова ведь вы там объясняете все очень четко что редкость.
Как то год учил именно этот язык, потому что другими ЯП (кроме С и АСМ) многие микроконтроллеры не возможно программировать, но чудо то какое только после твоих уроков я понял суть вещей в С++, даже в SOLOLEARN тройное прохождения С++ не помогло углубиться так. Спасибо за уроки, от тебя действительно выйдут много толковых учеников, чем у тех кто показывает о С++ в ютубе, а я их поведал не мало пока не нашел твой канал.
Какой же вы очень хороший человек Сергей!!! Я от души благодарен за ваши уроки. Пусть всегда с вами будет счастье и здоровье и любимые люди!!!! Я понимаю что можете сказать что я вас не знаю и почему пишу что вы хороший человек? Простая логика, у плохого человека не может быть так хорошо получаться так отлично объяснять что нибудь, тем более программирование))) еще раз спасибо огромное!!!
Подача урока на высшем уровне, жаль мало таких людей которые от души всё объяснят и так максимально легко что даже первоклашка сразу поймет. Всем бы так научится подавать материал а то ищу про Python одни профессора блин которые думают что всё все уже знают и сходу начинают всякие приложения писать. А Вам Сергей здоровья крепкого и успехов во всём!
05:29 - массив это непрерывная область памяти 13:23 - обязательно условие: чтобы в оперативной памяти было свободный непрерывный участок памяти 13:56 - в отладчике мы сможем увидеть только самый первый элемент
Если кто-то задумывался (и не знал) над тем, как работает 16-ричная система , то цифры ( а именно 1 2 3 и так далее до 9 ) записываются без изменений , а уже числа (>= 10 и < 16) будут иметь вид английского алфавита - A B C D E F где A=10 B=11 C = 12 D = 13 E = 14 F = 15, а вот число 16 принято писать за 0.
19:20, данные, которые лежат в этой ячейке принадлежат только этой программе и этому процессу, если бы это был кусочек видео из бандикама, то операционная система бы немедленно закрыла процесс из-за того, что она пытается достучаться к участку памяти, не принадлежащему ее процессу. Так что там лежат данные только этого процесса, ничто другое быть не может.
@Mimyagu artmoney получает так называемый handler процесса, через который и модифицирует данные оперативной памяти процесса и операционная система уже не считает это вмешательство «нелегальным»
мне нравится, как в каждом уроке вы "рекламируете" предыдущий урок. если кто-то нечаянно попадёт на 55 урок, то ему придётся пересмотреть все уроки в обратном порядке. это такой себе рекурсивный урок. чтоб посмотреть 55ый, нужно посмотреть 54 предыдущих и вернуться на 55ый)
Спасибо за видео. Теперь я понял как работала програма для взлома игр ArtMoney :) Её нужно было указать текущее значение денег, параметров или еще чего-то численного и когда она находила нужное значение пробовала поменять его. Теперь, я думаю, смог бы написать подобную программу ;)
А есть тут на канале видео о циклических сдвигах в двумерных массивах? А то про сдвиги в одномерных массивах информации много, а про двумерные что-то не нахожу толкового... А вообще очень хорошо и доходчиво всё объясняется. Сергей - молодец!
стирать адресс указателя вообще не обязательно в любом случае(операционная система сама стек чистит закрывая программу). Это делается ради удобства и для того, чтобы случайно не зацепить чужие данные
Можно вопрос: динамическая память для массива еще актуальна? у меня компилятор не ругается на такое: int n; cin >> n; int a[n]; тем более есть просто vector
Скажите пожалуста как создать динамический масив, если размер будет постоянно менятся. В векторах я могу использовать команду название_вектора.push_back(значение). Как это сделать с динамическим масивом? Я понимаю, что это уроки на с++, но мне нужен ответ на вопрос на язике с. Заранее спасибо.
Вспомнил сейчас, что после урока с массивами я попробовал указывать размеры двумерного массива через Cin и всё получилось. Теперь узнал, что получиться не должно было. Уже 2021-й год, может какие изменения завезли, есть информация об этом? Доп.: Вспомнил, что делал это уже после урока, да еще и на телефоне, который просил ввести числа до запуска программы, но после нажатия кнопки компиляции. Вопрос отпал.
Все правильно, так работает даже на C в старых версиях (имею ввиду указывать размеры и заполнять массиву н-мерные). Мне кажется автор просто решил так предостеречь новичков наверное, а может просто оговорился.
добрый день, у меня такой вопрос, пишу логику для плиточной игры на готовом движке (ue4), в проекте сделал класс инвентарь и в него добавил динамический целочисленный массив для записи Id предметов которые находятся у игрока, динамический потому, что инвентарь в процессе игры должен расширяться с уровнем игрока, в ue4 в каждом классе есть событие event tick которое вызывается каждый кадр, правильно ли я понимаю, что каждый кадр для массива будут выделяться разные ячейки памяти и выбираться такие адреса что бы мой массив поместился следуя арифметике массивов?
Если я создаю функцию которая возвращает динамический массив, то когда мне её нужно убивать delet-ом? в теле функции или при её вызове? double* Gauss(...) { ... return x; delete[] x; // тут? } int main() { double* x = new double[n] x = Gauss(); delete[] x; // или тут? }
Функцию можно организовать так, что при одном условии она создаёт массив, а при другом - убивает. Я думаю что признаком хорошего тона является создание и убивание в рамках одного объекта.
В объёме. «Статический» выделяется в стеке, там места очень мало и его объём не увеличивается, и туда можно поместить только небольшие массивы. К тому же, все переменные в стеке недолговременные, уничтожаются при выходе из области, где переменная была объявлена. А в куче - хранится до тех пор, пока не убрать (delete).
Уважаемый Сергей!Если вы увидите ответьте пожалуйста!Во первых спасибо вам большое за эти уроки!Дошел вот 67 видео очень многое узнал,сам учусь в университете в Турции,благодаря вам я даже впереди того что обучают!!Вы дойстойны уважение!!Хотел у вас спросить на счет этой темы,вот у меня выходят разные числа в массиве да,но адреса одни и те же,это нормально?заранее благодарю!
Спасибо большое за урок, все очень понятно кроме одного момента. Почему всё-таки необязательно писать const у переменной size. Понятно что это с помощью new как-то работает, но как именно. Урок про new и delete смотрела все равно не поняла этот момент
@@dumgik5811 Потому что это динамический массив. Пользователь программы может ввести размер динамического массива, по ходу выполнения программы, тогда под этот размер и выделится память. Какой размер введёт пользователь заранее неизвестно. В статическом массиве память выделяется сразу, как только запускается программа, потому программе надо знать размер статического массива в самом начале, ещё при запуске, а не по ходу выполнения, как для динамического массива. Размер статического массива прописывает программист в самой программе, а не пользователь.
я вот кстати хз, но у меня компилятор сразу инициализирует массив со значением элементов 0 при интовом массиве. версия компилятора: `--> g++ --version g++ (GCC) 8.2.1 20180831 Copyright (C) 2018 Free Software Foundation, Inc. п.с. с типом дабл тожэ самое (проверил на всякий случай, не округляет ли интовый тип мусор до нуля).
Почему компилятор в записи int *arr = new int [size] перемещает значок звездочки к int? То есть получается так: int* arr = new int [size]. У Вас так не происходит.
А я всегда пишу int*, а нет int *. Так более понятнее. И для себя я понимаю, что указатель типа int. А когда *на, то это уже само значение, которое лежит в ячейке памяти
Ненужная большинству фигня, мало того что большинство не понимают, так еще и времени много занимает, уж лучше бы изучали С одновременно изучаю архитектуру пк. Ну и после можно подучить язык ассемблера для дисассемблирования.
Ребят, подскажите почему у меня у ячеек одинаковые адреса? Это второй пример из урока где цифры рандомные. В первом примере так же одинаковые адреса 1 0099C5FC 7 0099C5FC 4 0099C5FC 0 0099C5FC 9 0099C5FC
А у меня не выводится массив через массив. Беру данные одного дин. массива вставляю в другой и мне компилятор выводит мусор. Интересно почему. Вывод делаю правильно.
В интернете прочитал, что всё же (по крайней мере для одномерного динамического массива) delete[] разрешает использовать эту область оперативной памяти другим программам, а значения элементов там могут оставаться, но их уже могут спокойно перезаписать другие программы Не знаю насколько правда
*Друзья, если вы решили изучать программирование и подписались на канал - рекомендую вам нажать колокольчик чтобы никогда не пропускать новые уроки!*
Можно ли вместо динамического массива использовать векторы? Или вообще полностью заменить динамический массив на вектор.
@@АлександрИбраимов-п3р Думаю нет((
@@UFO26, размер динамического массива не узнаётся , а устанавливается в ходе исполнения кода в зависимости от использованного алгоритма , к примеру :
const uint16_t MAX_SIZE = 65535;
uint8_t
WidthLine =137 ;
for (uint16_t size = WidthLine ; size < (MAX_SIZE - WidthLine); size = size + WidthLine)
{ int * arr = now int [size] ; for (... дальше как в ролике... }
Итак : наш size изначально имеет размер 137 , и в ходе исполнения шагов кода каждый раз увеличивается на число из переменной WidthLine =137 , и уже никогда не превысит 65 535 (я вычитаю WidthLine из MAX_SIZE , чтобы не случилось переполнения , ибо MAX_SIZE может быть не кратно WidthLine). Но при желании , и MAX_SIZE можно сделать не константой а переменной, куда операционка будет вкладывать значение допустимой длины непрерывной свободной области памяти .
Лучший
Вы, наверное, первый человек, которому стараюсь не забывать ставить лайки под каждым видео.
Благодарю за поддержку!
так же)))
Аналогично, даже иной раз переживаю, а не забыл ли палец вверх клацнуть, увлекшись содержимым урока.
Аналогично !!!
Так же
ЛУЧШИЙ НА РУНЕТЕ.
ТЫ ДАЕШЬ ВОЗМОЖНОСТЬ ТЕМ, У КОГО ПРОБЛЕМЫ С ФИНАНСАМИ, БЕЗ ДЕНЕЖНЫХ ЗАТРАТ ИЗУЧАТЬ ПРОГРАММИРОВАНИЕ. СПАСИБО БОЛЬШОЕ!!!
Открою небольшую тайну, есть куча бесплатного качественного материала по изучению программированию. Книги хорошо подходят, но не для всех. Бесплатные курсы, абсолютно всем подходят. А видосов на ютубе и не только, вагон и маленькая тележка, при чем только русскоязычных,а сколько же на английском, представить сложно
спасибо большое за детальное объяснение! многие упускают всякие детали, когда объясняют, думая, что человек сам знает, что это, а вы прям и ссылки даете на нужные свои старые ролики, чтобы проследить логику уроков, если не понятно, и объясняете кратко, что дает возможность освежить старое, в общем. СПАСИБО ВАМ!!!
Пожалуйста! Благодарю за поддержку!
Сергей здравствуйте, я всегда думал что видео контент в сферах науки, это скорей кусок дерьма чем источник познавательности, люблю книги (хотя сложно даются), но когда я наткнулся на Ваш канал, он изменил всё представления об видео уроках, повторяю сейчас с++, много положительных эмоций Вы мне дали, спасибо что Вы есть, огромное Вам человеческое спасибо!!!!!!!счастья Вам и процветания.
Чем больше я учусь те больше понимаю что програмирование это командное дело . Спасибо и это фудоментальное добро вы делаеете как для языка так и для милионов людей кто то из них может что то сконструирует и а основы были истоки на вашем канале огромное Спасибо. За свет оброзования . За вдохновение и детали програмирование это командная деятельность . Репост это меньшее что я могу зделать .
И пару недель назад начал смотреть только твой канал от начала до середины (пока что), зная что лучшего для меня не сыскать, значительно многие уроки я уже запоминаю с одного просмотра, а то что нет смотрю снова ведь искать ответы у других это нереально, реальнее смотреть видео снова ведь вы там объясняете все очень четко что редкость.
Как то год учил именно этот язык, потому что другими ЯП (кроме С и АСМ) многие микроконтроллеры не возможно программировать, но чудо то какое только после твоих уроков я понял суть вещей в С++, даже в SOLOLEARN тройное прохождения С++ не помогло углубиться так. Спасибо за уроки, от тебя действительно выйдут много толковых учеников, чем у тех кто показывает о С++ в ютубе, а я их поведал не мало пока не нашел твой канал.
спасибо тебе. А то я одному дебилу объясняю, что здесь проще, а он упирается, твой коммент помог мне в решении данного вопроса, спасибо!
7:18 это лучший момент когда сергей программист наверное уровня мидл вводит cout с 10 раза ))))))))
7:10
;)
7:17 - Господи, да попади уже по клавишам)
Спасибо за урок, сенсей
сорян, клавиатура под столом, печатаю в слепую =)
Продолжайте в том же духе, это весело)
Огромное спасибо за уроки, у вас талант учителя великолепный, продолжаю учиться по ним.
Вау это прям совокупность всего, что проходили круто преподаешь!
#динамическиймассив #SimpleCode #урокипрограммирования
Я обожаю Ваш канал и этот курс. Благодаря вам покорить программирование становится проще, спасибо вам огромное!
Какой же вы очень хороший человек Сергей!!! Я от души благодарен за ваши уроки. Пусть всегда с вами будет счастье и здоровье и любимые люди!!!! Я понимаю что можете сказать что я вас не знаю и почему пишу что вы хороший человек? Простая логика, у плохого человека не может быть так хорошо получаться так отлично объяснять что нибудь, тем более программирование))) еще раз спасибо огромное!!!
Благодарю за данный урок. Все достаточно информативно и просто для изучения.
Пожалуйста!
*комментарий для продвижения ролика* спасибо за уроки!
Прекрасно подготовлены материалы уроков и грамотно поданы, осталось только усвоить и применить ;)
Доступно и понятно! Спасибо вам большое, что стараетесь)
Подача урока на высшем уровне, жаль мало таких людей которые от души всё объяснят и так максимально легко что даже первоклашка сразу поймет. Всем бы так научится подавать материал а то ищу про Python одни профессора блин которые думают что всё все уже знают и сходу начинают всякие приложения писать.
А Вам Сергей здоровья крепкого и успехов во всём!
05:29 - массив это непрерывная область памяти
13:23 - обязательно условие: чтобы в оперативной памяти было свободный непрерывный участок памяти
13:56 - в отладчике мы сможем увидеть только самый первый элемент
Массив - это тип данных. В отладчике вы можете увидеть не только самый первый элемент, но и весь массив целиком, при желании.
Нет в языках С/С++ типа данных «массив». Массив - это просто указатель на кусок памяти.
Очень доступно объясняешь! Всегда смотрю твои видео, если не могу вникнуть в тему, которую нам задают.
Спасибо, очень хорошо, что недостатки плюсов показываете.
это не недостатки, это фичи))
Если кто-то задумывался (и не знал) над тем, как работает 16-ричная система , то цифры ( а именно 1 2 3 и так далее до 9 ) записываются без изменений , а уже числа (>= 10 и < 16) будут иметь вид английского алфавита - A B C D E F где A=10 B=11 C = 12 D = 13 E = 14 F = 15, а вот число 16 принято писать за 0.
Какие числа? Это цифры, а цифры 16 нет в 16церичной системе
@@arsIsv цифры это от 0 до 9
@@КириллАнтонов-й6т по твоему F это не цифра в 16ричной системе счисления?)
@@arsIsv я тебе про 10-тичную говорю
@@arsIsvчел просто хотел помочь, а ты нашёл совсем безобидную ошибку и говоришь об этом, это говорит о том, что у тебя самооценка низкая
Как всегда всё супер и по порядку))) Спасибо большое
Пожалуйста! =)
Благодарствую.
Удачи и успехов в делах.
👍🏾
Поздоровляю с 350к просмотров)скоро милион будет)
19:20, данные, которые лежат в этой ячейке принадлежат только этой программе и этому процессу, если бы это был кусочек видео из бандикама, то операционная система бы немедленно закрыла процесс из-за того, что она пытается достучаться к участку памяти, не принадлежащему ее процессу. Так что там лежат данные только этого процесса, ничто другое быть не может.
@Mimyagu artmoney получает так называемый handler процесса, через который и модифицирует данные оперативной памяти процесса и операционная система уже не считает это вмешательство «нелегальным»
Спасибо за уроки, всем кто спрашивает вас рекомендую
мне нравится, как в каждом уроке вы "рекламируете" предыдущий урок.
если кто-то нечаянно попадёт на 55 урок, то ему придётся пересмотреть все уроки в обратном порядке.
это такой себе рекурсивный урок. чтоб посмотреть 55ый, нужно посмотреть 54 предыдущих и вернуться на 55ый)
Вероятно один из самых удачных примеров рекурсии)
не, вначале рекурсии почти не было, где-то с 40го началась))
Уважаемый Сергей, спасибо за видео!
ОЧень хорошие уроки !!! Спасибо за Ваш труд !!!
Сергей, спасибо большое! Нереально круто объясняешь
Спасибо за уроки, все разжевано и понятно!
Сколь много я узнал !!! Спасибо вам большое.
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
Спасибо тебе за уроки.
Спасибо за видео. Теперь я понял как работала програма для взлома игр ArtMoney :) Её нужно было указать текущее значение денег, параметров или еще чего-то численного и когда она находила нужное значение пробовала поменять его. Теперь, я думаю, смог бы написать подобную программу ;)
получилось написать ?)
@@ВладиславТимофеюк ого, за 6 років я написав багато чого, але не на плюсах) пішов у фулстек дотнета і дуже добре себе почуваю на посаді техліда 😎
Очень круто! Спасибо большое за такое доступное и понятное объяснение всего)
Сергей - гуру!
Спасибо!
Классный урок, очень приятно слушать
Спасибо с Украины) Лайк
И я Украинский ЛАЙК жмакаю после каждого видео на своих 2-х аккаунтах !!!
А есть тут на канале видео о циклических сдвигах в двумерных массивах? А то про сдвиги в одномерных массивах информации много, а про двумерные что-то не нахожу толкового... А вообще очень хорошо и доходчиво всё объясняется. Сергей - молодец!
Очень круто и интересно!
Спасибо большое:)
*Большое спасибо! Очень полезное видео!*
Прекрасное объяснение! 🤟🤟
ты лучший
Огромное спасибо вам🔥
Ты просто лучший!!!
А чистить данные в ячейках массива через null или nullptr здесь ненужно, как в случае с обычными данными?
тоже интересно
Напишите, пожалуйста, если вы нашли ответ на вопрос
@@Kokurorokuko Напишите, пожалуйста, если вы нашли ответ на вопрос
@@crackall1946 имеет смысл установить в nullptr только сам указатель на массив (т.е. arr = nullptr)
@@leshiyni давно уже рашил этот вопрос. У меня плкйлист к концу подходит
удоляй свой моссив, удоляй сказал, он динамический 💣
За урок спасибо!
спасибо за урок! :)
just thank you!
Уважаемый Сергей ты можешь сделать рубрику где вы будете отправлять исходники с ошибками а мы будем их
исправлять
нет, такого не будет.
это глупо
Подскажите пожалуйста как очистить полностью динамическую память
ваша переменная = nullptr или NULL;
@Musikan0
И доя чего ты дал неправильный ответ?
Вопрос, нужно ли при работе с массивом стирать данные из указателя или нет?
Напишите, пожалуйста, если вы нашли ответ на вопрос
стирать адресс указателя вообще не обязательно в любом случае(операционная система сама стек чистит закрывая программу). Это делается ради удобства и для того, чтобы случайно не зацепить чужие данные
Благодарю 🙏
Какую комбинацию клавиш Вы используете для создания конструкции цикла for ?
пишем for потом нажимаем TAB;
спасибо)
Можно вопрос: динамическая память для массива еще актуальна? у меня компилятор не ругается на такое:
int n;
cin >> n;
int a[n];
тем более есть просто vector
Спасибо, я больше не буду издеваться над памятью моего компа...
7:11, боль
В matlab все объекты динамические и там была команда pack. В си были функции mark и relese , что посоветуете в cpp?
Спасибо
Спасибо!
Нельзя получить чужие данные, только данные, которые относятся к процессу
that`s amazing!!!
1.5 скорости можно смело ставить , очень медленно , на за инфу спасибо
для тебя может да, но большинству новичков надо все успевать переваривать в голове, чем не успевать обдумывать услышанную информацию
зато даже на х2 все слова разборчивы
Скажите пожалуста как создать динамический масив, если размер будет постоянно менятся.
В векторах я могу использовать команду название_вектора.push_back(значение). Как это сделать с динамическим масивом? Я понимаю, что это уроки на с++, но мне нужен ответ на вопрос на язике с. Заранее спасибо.
А не подскажите, почему в xcode в статическом массиве, когда задаем ему размерность можно отбросить const?
Как заполнить элементы массива нужными мне числами ?
Вместо rand() заполняй своими нужными.
Здравствуйте, Сергей. Будут ли бинарные деревья рассматриваться в дальнейшем?
Будут.
Вспомнил сейчас, что после урока с массивами я попробовал указывать размеры двумерного массива через Cin и всё получилось. Теперь узнал, что получиться не должно было. Уже 2021-й год, может какие изменения завезли, есть информация об этом?
Доп.: Вспомнил, что делал это уже после урока, да еще и на телефоне, который просил ввести числа до запуска программы, но после нажатия кнопки компиляции. Вопрос отпал.
Все правильно, так работает даже на C в старых версиях (имею ввиду указывать размеры и заполнять массиву н-мерные). Мне кажется автор просто решил так предостеречь новичков наверное, а может просто оговорился.
спасибо!
добрый день, у меня такой вопрос, пишу логику для плиточной игры на готовом движке (ue4), в проекте сделал класс инвентарь и в него добавил динамический целочисленный массив для записи Id предметов которые находятся у игрока, динамический потому, что инвентарь в процессе игры должен расширяться с уровнем игрока, в ue4 в каждом классе есть событие event tick которое вызывается каждый кадр, правильно ли я понимаю, что каждый кадр для массива будут выделяться разные ячейки памяти и выбираться такие адреса что бы мой массив поместился следуя арифметике массивов?
Pochemu fuznkciya rand() vizivaet vsegda odni i te je chisla v odinakovo razbrosannom poryadke?
Посмотри 29 урок, там подробно все рассказано
орфографический инсульт
потому что нужно ввести сид. Для одинаковых сидов одинаковые числа.
Если я создаю функцию которая возвращает динамический массив, то когда мне её нужно убивать delet-ом? в теле функции или при её вызове?
double* Gauss(...)
{
...
return x;
delete[] x; // тут?
}
int main()
{
double* x = new double[n]
x = Gauss();
delete[] x; // или тут?
}
Функцию можно организовать так, что при одном условии она создаёт массив, а при другом - убивает. Я думаю что признаком хорошего тона является создание и убивание в рамках одного объекта.
А как музыка называется?
в чем преимущество динамического массива, чем статического, да и в целом, чем лучше динамическое выделение памяти, чем статическое
В объёме. «Статический» выделяется в стеке, там места очень мало и его объём не увеличивается, и туда можно поместить только небольшие массивы.
К тому же, все переменные в стеке недолговременные, уничтожаются при выходе из области, где переменная была объявлена. А в куче - хранится до тех пор, пока не убрать (delete).
Уважаемый Сергей!Если вы увидите ответьте пожалуйста!Во первых спасибо вам большое за эти уроки!Дошел вот 67 видео очень многое узнал,сам учусь в университете в Турции,благодаря вам я даже впереди того что обучают!!Вы дойстойны уважение!!Хотел у вас спросить на счет этой темы,вот у меня выходят разные числа в массиве да,но адреса одни и те же,это нормально?заранее благодарю!
Как в Турции образование? На кого конкретно учитесь?
Спасибо большое за урок, все очень понятно кроме одного момента. Почему всё-таки необязательно писать const у переменной size. Понятно что это с помощью new как-то работает, но как именно. Урок про new и delete смотрела все равно не поняла этот момент
если зададим константу для сайза, то нельзя будет менять его значение вводом любого числа, и на выходе получим обычный статический массив
@@_qubbix это понятно, но вопрос тут в другом. почему массив вообще создается с неконстантным размером?
@@dumgik5811 Потому что это динамический массив. Пользователь программы может ввести размер динамического массива, по ходу выполнения программы, тогда под этот размер и выделится память. Какой размер введёт пользователь заранее неизвестно.
В статическом массиве память выделяется сразу, как только запускается программа, потому программе надо знать размер статического массива в самом начале, ещё при запуске, а не по ходу выполнения, как для динамического массива. Размер статического массива прописывает программист в самой программе, а не пользователь.
Простите, у меня есть вопрос:мне преподователь (по с++) говорил что [] в delete не нужны.
значит надо еще где-нибудь поискать, что по этому поводу пишут
вроде, если без [ ], то очистится только нулевой элемент
@user-lp5ry7se4k
Твой преподаватель - мудак, не знающий С++
Насколько мне известно, статические массивы тоже можно объявлять как неконстантные и инициализировать через ввод.
Я частично прав. Почему-то в Dev C++ не запрещено создавать массив из n элементов, где n - не константа. А в Visual Studio так нельзя. Почему так?
@@Kokurorokuko компиляторы разные
я вот кстати хз, но у меня компилятор сразу инициализирует массив со значением элементов 0 при интовом массиве.
версия компилятора:
`--> g++ --version
g++ (GCC) 8.2.1 20180831
Copyright (C) 2018 Free Software Foundation, Inc.
п.с. с типом дабл тожэ самое (проверил на всякий случай, не округляет ли интовый тип мусор до нуля).
По сути переменная будет инициализирована значением 0 только вне функции.
После создания динамического массива хочу в цикле for присвоить nulptr для всех arr + i. Вижуал выдает ошибку. Почему?
Память не нагрузилась, а вот проц сразу наполовину и на буст частоты полетел)))
Чем вектор от динамического массива отличается?
Вектор - шаблон класса. Дин. массив - это объект, который расположенный в дин. области памяти.
А у кого V.S. 2022
Можете сказать что делать если
При обращении к динамической памяти
Вызывается исключение
Вопрос, вы хотите сказать что система при выделении динамической памяти не контролирует выход за нее ?
Почему компилятор в записи int *arr = new int [size] перемещает значок звездочки к int? То есть получается так:
int* arr = new int [size]. У Вас так не происходит.
А я всегда пишу int*, а нет int *. Так более понятнее. И для себя я понимаю, что указатель типа int. А когда *на, то это уже само значение, которое лежит в ячейке памяти
Сергей, здравствуйте! Спасибо за подробный рассказ. ПОдскажите как удалить часть массива, тем самым уменьшить его длину?
через отладчик можно посмотреть значение любого элемента массива, нужно навести на квадратную скобку тогда покажется значение i-того элемента
А можно ли напрямую подключиться к ячейке памяти?
Арифметика указателей урок посмотри!
почему у меня при таком же коде, как на видео, адрес ячеек динамического массива одинаковый? а на видео с шагом в 4 байта?
Смотря это видео, понимаю, зачем в универе у нас преподают язык Ассемблер на примере процессора Intel 8086.
Ненужная большинству фигня, мало того что большинство не понимают, так еще и времени много занимает, уж лучше бы изучали С одновременно изучаю архитектуру пк. Ну и после можно подучить язык ассемблера для дисассемблирования.
Интересно, если я например выделил размер для массива на 10, а потом изменил размер на 20, но за десятым будут чужие данные, что произойдет??
И да, я попробовал создать массив до ввода его размера, выдало ошибку - Коррупция кучи. и программа упала. Так что, на заметку возьмите.
Ребят, подскажите почему у меня у ячеек одинаковые адреса?
Это второй пример из урока где цифры рандомные. В первом примере так же одинаковые адреса
1 0099C5FC
7 0099C5FC
4 0099C5FC
0 0099C5FC
9 0099C5FC
у меня тоже.
скорее всего вывод только первой ячейки без арифметики индексов
А у меня не выводится массив через массив. Беру данные одного дин. массива вставляю в другой и мне компилятор выводит мусор. Интересно почему. Вывод делаю правильно.
Класно!
А как почистить в памяти этот массив? delete [] arr чистит только первую ячейку
for попробуй исходя из размера
В интернете прочитал, что всё же (по крайней мере для одномерного динамического массива) delete[] разрешает использовать эту область оперативной памяти другим программам, а значения элементов там могут оставаться, но их уже могут спокойно перезаписать другие программы
Не знаю насколько правда
@sleepyNovember_project
На 100%