|
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
|
||||||
Можно ли обойти динамический массив не зная его размер?11.04.2016, 02:13. Показов 15510. Ответов 79
Метки нет (Все метки)
1
|
||||||
| 11.04.2016, 02:13 | |
|
Ответы с готовыми решениями:
79
Можно ли создать массив, изначально не зная его размерности? Можно ли задать массив, не зная заранее его длину? |
|
Комп_Оратор)
|
||
| 11.04.2016, 22:05 | ||
![]() Но это не значит, что указатель, - конвертер. Он об этом и не догадается.
1
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
||
| 11.04.2016, 22:14 | ||
|
0
|
||
|
Комп_Оратор)
|
||
| 11.04.2016, 22:20 | ||
|
Любой тип с точки зрения низкоуровневого размещения это массив байт. Это если говорить о уровнях абстракции там, где не нужно бы.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 11.04.2016, 22:24 | |||
|
никаких гарантий. _msize выдает размер блока, который гарантированно не меньше, но может быть больше, например. "массив данных" не имеет к нему никакого отношения.
1
|
|||
|
|
||
| 11.04.2016, 22:25 | ||
|
По поводу баллов - я не тот кто их раздаёт. Мне на них плевать.
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 11.04.2016, 22:32 | |
|
То, что это не тип данных, не позволяет говорить, что динамических массивов в C++ нет.
0
|
|
| 11.04.2016, 22:32 | |
|
Не по теме: castaway, это же была очевидная цитата с теле-программы.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 11.04.2016, 22:41 | |||||||
|
которые предназначены для компалтайм вычислений. http://rextester.com/BAWA95629
2
|
|||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
| 11.04.2016, 22:53 | ||||||
|
hoggy, и тем самым ваш код стал еще "не читабельнее".
0
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 11.04.2016, 22:58 | |
|
Т. е. это просто способ получить размер в элементах, а не в байтах?
0
|
|
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 11.04.2016, 23:13 | ||
|
0
|
||
|
Комп_Оратор)
|
|||||||
| 12.04.2016, 00:18 | |||||||
Fulcrum_013, поскольку мы не понимаем друг друга в таких простых вещах как char != int и (int*) !=[]int то в с-строки предлагаю не уходить. И так нагородили, - будь здоров. ![]() ps если Вы знаете число которое можно использовать в качестве терминатора для, скажем, int то напишите его.
0
|
|||||||
|
Неэпический
|
||||
| 12.04.2016, 09:35 | ||||
|
Одной виндой мир не ограничен. У меня, например, оно 4 байта. то это не значит что так оно везде. Да, он целочисленный, да, занимает один байт, но, например, кто сказал что он unsigned? char может быть как беззнаковым, так и знаковым - это определяется реализацией. только вот имя массива несет в себе дополнительную метаинформацию, которая теряется при decay типа до указателя. Не понимание этого момента может сильно стукнуть по башке в шаблонах.
2
|
||||
|
Комп_Оратор)
|
||
| 12.04.2016, 10:21 | ||
|
Меня вот всегда занимал вопрос удивительного отличия delete от delete []. Утверждается, что оно в том, что первый запускает деструктор для объекта по указателю где память выделялась оператором new, а второй, - для всех объектов, под которые память которые выделена оператором new[]. То есть, похоже что не просто "каждый компилятор желает знать, где сидит фазан"! Похоже, что каждый компилятор знает размер или может его узнать. Пусть память выделяется и освобождается операционной системой, по запросу программы, но конструкторы и деструкторы же не передаются? Значит информация должна где-то быть у программы?
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 12.04.2016, 10:39 | ||||
|
Добавлено через 7 минут
0
|
||||
|
return (true);
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
|
|||||||
| 12.04.2016, 10:55 | |||||||
|
Попробуйте сами:
0
|
|||||||
|
Неэпический
|
||
| 12.04.2016, 11:05 | ||
|
Добавляется некий хвостик перед основным буфером, который содержит число элементов, собственно при new такой хвостик может отсутствовать, дабы не нужен, соответственно операции new/new[] delete/delete[] должны соответствовать друг другу. Вот пример: Передача по ссылке двумерного динамического массива в функцию
1
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 12.04.2016, 11:16 | ||
|
0
|
||
|
Неэпический
|
||
| 12.04.2016, 11:24 | ||
|
Например: Как видим, работа new и new[] может отличаться. И вообще может вернуться указатель не на выделенную память, а на некий определенный участок этой памяти. Вот, например, при использовании delete оно знает, что объект один, вызывает деструктор и передает адрес дальше в функцию освобождения(operator delete). А теперь смотрите что получается, если мы передадим сюда то, что вернул нам new[], то получим вызов одного деструктора и передачу в operator delete указателя, только вот этот указатель уже не на выделенную память, а несколько другой(тот, который вернулся пользователю). Соответственно получим черт пойми что. А если бы использовали delete[], то вот он уже знает о наличии хвоста и отработает корректно. И рассмотрим обратную ситуацию. Память выделялась с помощью new, а удаляется с помощью delete[]. delete[] предполагает, что есть хвост, ломится туда, читает оттуда кол-во элементов и вызывает деструкторы для данного кол-ва объектов. А теперь вопрос: что у нас в этом хвосте, если память выделялась new и никакого хвоста нет? Правильно! Неизвестно что там. Может 0, а может 100500. Соответственно уже имеем UB (не наша память + вызов деструкторов для несуществующих объектов). Плюс к этому добавляется то, что в operator delete уйдет указатель, смещенный "назад" на размер хвоста, что также приведет к неопределенным последствиям. Вызвали бы delete вместо delete[], то всё бы было нормально. По ссылке выше есть пример "перезаписи" этого "хвоста".
5
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 12.04.2016, 11:59 | ||
|
0
|
||
| 12.04.2016, 11:59 | |
|
Как правильно передать динамический массив в функцию, увеличивающую его размер, чтобы изменения сохранились
Создать массив с нулями и единицами в шахматном порядке, что бы его размер можно было вводить с клавиатуры
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|