|
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
|
||||||||||||||||
Удаление динамического массива05.03.2009, 21:09. Показов 117236. Ответов 39
Метки нет (Все метки)
Здравствуйте!
Имею следующий вопрос: создаётся массив таким образом:
Чем грозит второй вариант?
0
|
||||||||||||||||
| 05.03.2009, 21:09 | |
|
Ответы с готовыми решениями:
39
Удаление динамического массива Удаление динамического массива Удаление динамического массива |
|
5 / 5 / 1
Регистрация: 03.03.2009
Сообщений: 18
|
|
| 05.03.2009, 21:37 | |
|
При освобождении памяти из-под массива квадратные скобки обязательны, так как их отсутствие может привести к неопределенному поведению программы. А для освобождения памяти из-под одной переменной квадратные скобки не нужны. Операция delete [] выполняется медленее, чем delete. Это если память была выделена с помощью оператора new, а если память была выделена с помощью malloc, то память освобождают с помощью функции free.
1
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 05.03.2009, 21:51 | |
|
Кроме того, что указал коллега FAT, прими еще во внимание, что для массивов нетривиальных классов delete [] вызывает деструкторы для каждого элемента массива, а delete - только для единственного. Если деструктор элемента отвечает за освобождение памяти, хэндлов или еще каких-то ресурсов, реализуя идиому RAII, последствия нетрудно предвидеть....
Да, и, конечно, delete вместо delete[] (равно как и наоборот) не только может привести к UB, но и - обязательно приведет. Другое дело, что это может проявится даааааалеко не сразу......
2
|
|
|
296 / 56 / 5
Регистрация: 22.05.2008
Сообщений: 788
|
|
| 06.03.2009, 14:02 | |
|
Вообщем — если ты выделял место под несколько элементов, то используй delete [], иначе используй просто delete.
1
|
|
|
Технофашист
228 / 216 / 11
Регистрация: 11.03.2009
Сообщений: 887
|
|
| 25.03.2010, 19:36 | |
|
Народ, помогите, как высвободить память из под многомерного массива:
String ***C = new String**[n]; Вот delete[][][] не катит. Как быть?
0
|
|
|
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
|
||||||
| 25.03.2010, 19:42 | ||||||
|
darkAngel, для многомерных используется цикл:
Для 3 и более -мерных массивов процедура аналогичная
4
|
||||||
|
0 / 0 / 0
Регистрация: 26.03.2012
Сообщений: 8
|
|
| 29.04.2012, 18:33 | |
|
Прочитал кучу информации про массивы и выделение памяти, прочитал кучу тем на этом форуме.
Все равно никак не получается. Код как в топике темы, почти один в один, но при удалении массива через delete [] x возникает такая ошибка: [img]Загружайте картинки на форум./aa15c6081c21.jpg[/img] В чем может быть дело? Среда VS 2010.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 01.05.2012, 11:20 | |
|
Мишико, скорее всего, при работе с этой памятью вы где-то выходите за её границы.
0
|
|
| 01.05.2012, 11:54 | ||
|
я могу ошибаться ,но где то я читал что это объясняется тем что компилятор знает размерность массива т е(количество [])
0
|
||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 01.05.2012, 11:57 | |
|
Нет, не знает. Для этого и сделали delete []. Была вроде встроенная "фича" в старых борландских компиляторах, но она к стандарту не относится.
0
|
|
|
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|||
| 01.05.2012, 12:00 | |||
|
1
|
|||
| 01.05.2012, 12:12 | ||||||
|
darkAngel,yanyk1n, компилятор dev c++, в данном случае совершенно нормально удалил массив
можно проверить через диспетчер задач
0
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 01.05.2012, 12:15 | ||
|
Van111, потому что в массиве лежит скалярный тип. Положите в массив что-то сложнее, объект с деструктором, например, и будете наблюдать UB. Возможно, какие-то компиляторы нормально вызовут деструкторы для всех элементов, но мне представляется менее радужная картина, в которой удалён будет только первый объект в массиве.
1
|
||
|
57 / 1 / 1
Регистрация: 17.08.2012
Сообщений: 31
|
||||||||||||
| 24.09.2012, 15:38 | ||||||||||||
0
|
||||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 24.09.2012, 18:49 | |
|
dortonyan, второй вариант. Правда, их можно объединить, если внутри внешнего цикла после выполнения внутреннего удалять и саму строку на соответствующей итерации.
0
|
|
|
57 / 1 / 1
Регистрация: 17.08.2012
Сообщений: 31
|
||||||
| 24.09.2012, 20:16 | ||||||
|
Вот так?
0
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 24.09.2012, 20:18 | |
|
dortonyan, именно.
1
|
|
|
2 / 2 / 0
Регистрация: 16.08.2020
Сообщений: 25
|
|||||||||||
| 18.08.2020, 17:26 | |||||||||||
|
Еще немного oб удалении массивов. Здесь создается массив, заполняется, выводятся его элементы, затем удаляется
0
|
|||||||||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 18.08.2020, 17:42 | |
|
markmarks, просто в этот раз операционная система не заметила, что обращаешься к чужой памяти. В другой раз заметит и выбьет твоё приложение в ошибку. При вызове delete[] никакого "затирания" памяти не происходит, просто память передаётся в пользование другой исполняющейся на твоём компе программе (или помечается как "свободная").
Добавлено через 1 минуту А что там будут делать другие программы с этой памятью - зависит от того, "как звёзды встанут".
1
|
|
|
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
|
||
| 18.08.2020, 21:07 | ||
|
1
|
||
| 18.08.2020, 21:07 | |
|
Помогаю со студенческими работами здесь
20
Удаление динамического массива Удаление динамического массива Удаление динамического массива Удаление динамического массива Удаление динамического массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|