|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.08.2010, 13:33 | #1 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Установка размера динамического
(Не дописал название :-) "Установка размера динамического массива")
Здравствуйте, уважаемые форумчане! Вопрос: возможно ли, имея адрес динамического массива(но не саму переменную), установить SetLength'ом новый размер? Что-то вроде: Код:
Изобретатель велосипедов
|
09.08.2010, 13:36 | #2 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
А зачем брать адрес динамического массива, если переменная типа динмассив и так указатель? Не веришь? Проверь чему равен SizeOf(a) и убедись, что он равен SizeOf(Pointer) независимо от размера данных в массиве
PS: Для спарвки - переменные типа строки (string) и динамические массивы - это указатели, которые содержат либо nil, либо указатель на первый (нулевой для динмассива) элемент массива (символ строки), а сам массив расположен в динамической памяти. По отрицательному смещению от первого элемента лежат сервисные данные - длина и указатель на счетчик ссылок: Код:
Последний раз редактировалось Ins; 09.08.2010 в 13:41. |
09.08.2010, 13:44 | #3 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Спасибо, это мне прекрасно известно, как и структура динамического массива. Я не это спрашивал, а то, что написано в посте: можно ли стандартным SetLength, имея указатель на переменную дин. массива, установить его длину.
Изобретатель велосипедов
|
09.08.2010, 13:48 | #4 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Можно, и я даже знаю как Но все-таки, для профилактики плохого кода, зачем тебе указатель на указатель? Нужен указатель - передай Pointer(a), а не @a
|
09.08.2010, 13:49 | #5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
09.08.2010, 13:53 | #6 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Ладно, дам Hint: объяви не a: array of Integer, а a: TIntegerArray, где TIntegerArray = array of Integer; Заведи тип PIntegerArray = ^TIntegerArray, а дальше вспомни про приведение типов, Pointer разадресовывать крышечкой нельзя, а типизированный указатель - можно
|
09.08.2010, 13:56 | #7 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Не секрет: есть динамически заполняемые поля у объекта, причем значения берутся из файла вместе со структурой (для разных типов), => поля заполняются по смещению указателя на объект в зависимости от размера предыдущих полей, одним из которых может являться дин. массив, который надо заполнить.
Кажется, ни фига не понятно я объяснил, но как смог) Ins Это конечно неплохо, и я опять же это знал) ПРоблема в том, что тип элементов массива мне неизвестен))) Я просто думал, что SetLength как-то может это определить это по данным лежащим в указателе и сразу всё сделать...
Изобретатель велосипедов
Последний раз редактировалось Stilet; 09.08.2010 в 14:02. |
09.08.2010, 14:00 | #8 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Если я правильно понял, твой код жестко привязан к смещению полей в объекте? Если так, то КАКОЙ УЖАС! Т.е. если я потом где-то внесу новое поле в объект, сместив позиции старых, то код загрузки параметров "поплывет"? Если ты делаешь что-то типа десериализации, глянь это:
http://www.delphikingdom.com/asp/vie...catalogid=1379 |
09.08.2010, 14:03 | #9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Не очень это хорошая идея, ИМХО, я бы по другому делал...
I'm learning to live...
|
|
09.08.2010, 14:11 | #10 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Код загрузки поплывёт только в том случае, если параметры загрузки забыть подкорректировать, чего у меня, к счастью, не произойдёт из-за самого принципа проекта... Сейчас пытаюсь въехать в написанное в статье из королевства, но пока особо ничего заманчивого не нашел, буду читать дальше)
Изобретатель велосипедов
Последний раз редактировалось Selestis; 09.08.2010 в 14:17. Причина: орфография |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Создание динамического Comboboxа ! | web_lover | Microsoft Office Excel | 6 | 24.06.2010 23:02 |
Зависимость размера рисунка от размера формы | Hippie | Мультимедиа в Delphi | 3 | 18.05.2010 10:46 |
Поиск динамического Memo | Fezilk | Общие вопросы Delphi | 7 | 26.08.2009 20:39 |
Изменение размера динамического массива налету | Zeraim | Общие вопросы Delphi | 12 | 26.07.2009 14:23 |
сортировка динамического списка | new_sergei | Помощь студентам | 1 | 19.12.2008 00:36 |