|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||||||||||||||||||||
Создание динамического массива структур и его удаление06.02.2013, 10:06. Показов 25403. Ответов 36
Господа, поясните пожалуйста следующий момент:
создаю структуру:
P.S. И правильно ли удалять такую конструкцию именно delete [], а не просто delete?
0
|
|||||||||||||||||||||
| 06.02.2013, 10:06 | |
|
Ответы с готовыми решениями:
36
Удаление динамического массива структур
Создание динамического массива структур |
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
|
| 06.02.2013, 12:05 | |
|
Правило простое, если new[], то и delete []
По 1 вопросу: после new возвращается указатель на блок выделенной памяти, перед этим блоке формируются дополнительные байты, в которых хранится размер, delete оттуда и берет информацию о том, сколько надо освободить памяти.
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 06.02.2013, 13:25 [ТС] | ||
|
Грубо говоря, на два объявленных TTList-a new разместит в ячейках памяти приблизительно следующее:
Да? Но если delete знает сколько ему удалять, то почему нельзя таким образом выяснить и размер занимаемой памяти?
0
|
||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
||
| 06.02.2013, 14:31 | ||
|
E>Логика: мы не можем ..., а компилятор — может, меня и смутила. E>Вопрос произошел от указанной темы об определении размера массива, поэтому и стало интересно, кто чего может. То есть я перефразировал бы свою мысль следующим образом: почему компилятор имеет средства для определения размера массива (то есть количества элементов), а программа таких стандартных средств не имеет. Я совсем недавно отвечал на точно такой же вопрос в comp.lang.c++: http://groups.google.com/group... otmail.com Еще раз и по-русски: Компилятор совсем не обязательно имеет средства для определения размера массива, выделенного в динамической памяти. Он компилятора требуется только то, чтобы он умел правильно выделять такие массивы при помощи 'new[]' и правильно уничтожать такие массивы при помощи 'delete[]'. Как компилятор это делает и какая дополнительная информация понадобится для этого компилятору и понадобится ли она вообще — личное дело компилятора. Классическим примером такой дополнительной информации является количество сконструированных элементов в массиве, которое нужно, например, для того, чтобы правильно выполнить деструкцию элементов массива. Если компилятору эта информация нужна только для того и только для того, чтобы вызвать правильное количество деструкторов, то сразу приходит на ум очевидная оптимизация: если хранимые в массиве объекты не имеют деструкторов (т.е. не являются экземплярами классов) или имеют тривиальные деструкторы (т.е. фактически тоже не имеют деструкторов), то знать количество элементов в массиве компилятору совершенно незачем, и формировать и хранить это количество нигде не надо. Эту оптимизацию используют многие компиляторы, включая MSVC и GCC. Если бы существовали стандартные средства для определения размера динамически выделенного массива через указатель на его первый элемент, то компиляторам пришлось бы сохранять информацию о размере всегда. Вышеописанная оптимизация использования памяти была бы невозможна. Это во-первых. Во-вторых, для единообразия, пришлось бы поддержать эту функциональность и для статических и автоматических массивов, что тоже несколько противречит общему духу встроенных С/С++ массивов. Все это, на мой взгляд, выглядит совершенно не нужно. Особенно если учесть, что пользователь при выделении массива держал в руках его размер и мог сам позаботиться о сохранении этого размера для дальнейшего использования.
0
|
||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||
| 06.02.2013, 15:23 [ТС] | |||
|
То есть (прочитал вдумчиво и шесть раз) механизм запоминания/определения размера динамически выделенного массива существует, но просто он не унифицирован для разных компиляторов и следовательно специально сделан недоступным?
И куча мелких вопросов в попытке как-то оправдать свое непонимание:
0
|
|||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
||
| 06.02.2013, 17:16 | ||
|
Какой практический интерес докопаться до размера через указатель? Он не зря написал
0
|
||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||||||||||||
| 07.02.2013, 12:13 [ТС] | ||||||||||||
|
Ведь не нужно же писать типа
0
|
||||||||||||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
|
| 07.02.2013, 15:34 | |
|
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||||
| 07.02.2013, 16:07 [ТС] | ||||
|
Добавлено через 1 минуту
0
|
||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||||||
| 07.02.2013, 16:46 [ТС] | ||||||
|
О том, что
0
|
||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||||||
| 07.02.2013, 16:57 [ТС] | ||||||
|
Нас интересует случай с
Что-то у меня внезапное прозрение - а может delete вовсе и не удаляет ничего, а только вытирает указатель?
0
|
||||||
|
|
|||
| 07.02.2013, 17:00 | |||
|
Добавлено через 1 минуту ![]() Тобиш книги читать... но это видимо не в вашем случае
0
|
|||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||
| 07.02.2013, 17:01 [ТС] | ||
|
0
|
||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||||||||||||||||||||||
| 08.02.2013, 09:48 [ТС] | |||||||||||||||||||||||
Вот методом научного тыка, по предположению, что она лежит перед первым элементом массива проведен следующий эксперимент (работает птолько с целочисленным массивом):
P.S. Builder 6 Build 10.161 P.P.S. Я думаю можно найти расположения и для остальных типов данных, мониторя всю память. Но легче узнать устройство компилятора и так выяснить куда он что пишет.
0
|
|||||||||||||||||||||||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
|||||||||||||||||
| 08.02.2013, 10:00 | |||||||||||||||||
|
Нулевые указатели придуманы как удобный способ «отметить» указатели, которые заведомо не указывают на корректный адрес в памяти. Например, при объявлении указателя как автоматической переменной его значение не определено. Чтобы отметить, что этот указатель ещё не содержит корректный адрес в памяти, такому указателю присваивают константу нулевого указателя:
3
|
|||||||||||||||||
| 08.02.2013, 10:00 | |
|
Помогаю со студенческими работами здесь
20
Создание динамического массива и его обработка Ошибка, создание динамического массива и его вывод Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|