|
Технофашист
229 / 217 / 11
Регистрация: 11.03.2009
Сообщений: 887
|
|
Динамический массив указателей04.09.2010, 08:34. Показов 72028. Ответов 28
Метки нет (Все метки)
Чегото не пойму такое вообще возможно?
Странно, что при объявлении можно не указывать размерность: int *a[]; Но как потом память выделять не известно. Добавлено через 2 минуты p.s. прошу не путать с указателем на массив.
0
|
|
| 04.09.2010, 08:34 | |
|
Ответы с готовыми решениями:
28
Динамический массив указателей Динамический массив указателей Динамический массив указателей |
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||
| 28.12.2016, 04:22 | ||||
|
Вы сами то как думаете?..
0
|
||||
|
Вездепух
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,391
|
|||||||||||||
| 28.12.2016, 05:01 | |||||||||||||
void нет и быть не может, ибо void - неполный тип, который не может быть сделан полным.void - ни больше, ни меньше.------ Доступ к массиву с элементами типа void * через указатель типа int ** является "грязным хаком" - переинтерпретацией памяти, нарушением strict aliasing и, как следствие, неопределенным поведением.
void ** является совершенно законным, как является законным и преобразование прочитанного void * к типу int * и дальнейшая работа через этот int * указатель (подразумевая, что он указывает в правильное место)
0
|
|||||||||||||
|
Вездепух
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,391
|
|||||||||||||
| 28.12.2016, 05:56 | |||||||||||||
void нет и быть не может, ибо void - неполный тип, который не может быть сделан полным.void - ни больше, ни меньше.------ Доступ к массиву с элементами типа void * через указатель типа int ** является "грязным хаком" - переинтерпретацией памяти, нарушением strict aliasing и, как следствие, неопределенным поведением
void ** является совершенно законным, как является законным и преобразование прочитанного void * к типу int * и дальнейшая работа через этот int * указатель (подразумевая, что он указывает в правильное место)
Не по теме: Ну вот, глюки сервера приводят к дупликации сообщений...
0
|
|||||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||
| 28.12.2016, 12:18 | ||
|
Спс конешно, но объяснение не дошло.. видимо потому что оно не объясняет нифига) Покрайней мере не со стороны здравой логики, я конешно тоже понимаю что нужно знать ещё и инструмент с которым работаеш, но именно поэтому и вопрос возник, что инструмент выдаёт ошибку. (ну и тут либо я чего то неправильно делаю, либо инструмент собирали в соседнем подвале)
0
|
||
|
Вездепух
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,391
|
||
| 28.12.2016, 12:54 | ||
void * и предназначен. Однако это не указатель на "ячейку" в памяти. Это указатель на точку в памяти. Чтобы из него получить указатель на некую "ячейку", вам тоже придется применить каст и привести указатель к типу "указатель на ячейку" (что бы вы ни понимали под "ячейкой"). Указателем на минимальную ячейку в языках С и С++ является указатель типа [signed/unsigned] char *, но не void *. void * указывает на точку. Это просто адрес.И у точки нет размера. Поэтому если где-либо в коде вы вдруг попытаетесь использовать указатель типа void * так, что компилятору понадобиться знать размер указуемого объекта, то ваш код будет некорректным. Диагностическое сообщение от компилятора может быть сформулировано по-разному, но суть его всегда одна и та же: так как void не является полным типом, его размер комилятору неизвестен и любые операции, требующие знания этого размера, являются ошибочными.В частности, применение оператора [] к указателю типа void * является некорректным. Оператор [] опирается на адресную арифметику. А адресная арифметика требует знания размера указуемого объекта. Так как у void нет размера, адресная арифметика к указателю типа void * не применима.И т.д.
1
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||
| 29.12.2016, 04:02 | ||||||
|
Получилось что то типа этого:
0
|
||||||
|
Вездепух
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,391
|
|||||||||||
| 29.12.2016, 07:33 | |||||||||||
&ppm, а в сообщении почему-то написано "**ppm adress"...char *.&pc внутри функции всегда была и будет одной и той же. Ее невозможно поменять.Эта же страннная печать "New ptr adress" повторяется много раз ниже. int. Указатель на указатель тут только один - ppm.**ppm[i]: когда на самом деле печатается &ppm[i].reinterpret_cast. Запахло жареным...ppm[0][i] - неопределенное поведение. Легальность адресной арифметики в ppm[0][i] сомнительна...*(char**)ppm[0] - это легально. Однако легальность адресной арифметики в ppm[0][0] сомнительна...((unsigned short*)ppm[1])[i] - это легально. ((float*) ppm[2])[i] - это легально. ((double*)ppm[3])[i] - это легально. Однако легальность адресной арифметики в ppm[1][i], ppm[2][i] и ppm[3][i] сомнительна...Но к чему это все?
0
|
|||||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||||
| 29.12.2016, 17:36 | ||||||||||||||
По поводу остального: в топку ![]() Добавлено через 8 минут Кст, адрес на строку так:
0
|
||||||||||||||
|
Вездепух
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,391
|
|||||
| 29.12.2016, 18:12 | |||||
[], еще до какого-либо доступа к памяти.reinterpet_cast говорит, что дальше может начаться бредятина. Именно дальше она у вас и началась. &((char**)ppm[0])[0] эквивалентно просто (char**)ppm[0]. Это адрес нулевого элемента вашего массива mc.
0
|
|||||
| 29.12.2016, 18:12 | |
|
Динамический массив указателей на объекты Динамический массив указателей на объекты класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера 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: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|