|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.09.2009, 13:54 | #1 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Адреса элементов динамического массива меняются...
Всем привет!
У меня Delphi 2009. Просто я не знаю, в пред идущих версия существует такая проблема или нет.... Короче есть глобальный динамический массив из не-имеет-значения-чего. И имеется что-то типа tListView где у каждого item-a в свойстве data указатель на элемент массива. Проблема в том, что после добавления новых элементов в массив мне приходится заново выставлять всем item-ам свойство data, так как при добавлении новых элементов адрес первого, ну и соответственно всех остальных меняется. Никак нельзя этого избежать? Если, допустим, я знаю максимальный размер, до которого может разрастись массив? |
06.09.2009, 16:40 | #2 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Данные в Data привязаны не к номеру итема, а к нему самому. Как - в данном случае не имеет значения. Вы можете менять итем как вам заблагорассудится, но Data не изменится, пока вы сами его не измените. Посему проблема ваша явно высосана из пальца... |
|
06.09.2009, 17:20 | #3 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
Скорее всего, не меняя концепции хранения указателей, проблемы не избежать.
Добавление элементов предполагает перераспределение памяти (так работает менеджер памяти и от этого никуда не спрятаться), и построить программу на таком не стабильном материале не получится. Отсюда следует, чтобы понять чего делать, не совсем "не-имеет-значения-чего" хранится в элементах массива. ListView тоже можно рассматривать как массив, в элементак которого хранятся указатели и может быть, если присмотретьcя и упомянутый массив то не нужен. Впрочем, все зависит от задачи, конечно. |
06.09.2009, 17:37 | #4 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
У меня someItem.data := @someArray[x] а не someItem.data := x!
|
06.09.2009, 18:39 | #5 |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
|
07.09.2009, 01:14 | #6 | ||
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Конечно при условии, что "не-имеет-значения-что" является объектом. Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 07.09.2009 в 01:19. |
||
07.09.2009, 07:31 | #7 | |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
Цитата:
У Altera привязка к массиву была не правильная. А если будет что то удалять из него то должен предусмотреть это. А в Вашем варианте если он поменяет значение в массиве то Дата будет в лучшем случае указывать на старые данные, а в худшем на уничтоженный объект. В общем все зависит от реализации и задумок Altera. Последний раз редактировалось s.Creator; 07.09.2009 в 07:48. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод элементов массива.Изменение элементов массива. | Vesnushka18 | Помощь студентам | 6 | 09.06.2011 13:05 |
Освобождение динамического массива? | VintProg | Общие вопросы Delphi | 15 | 28.08.2009 10:41 |
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива | HazelHen | Общие вопросы C/C++ | 2 | 29.03.2009 15:16 |
Удаление динамического массива | Сергей089 | Общие вопросы C/C++ | 3 | 08.03.2009 13:13 |
Удаление элементов из динамического массива | dashulka | Общие вопросы Delphi | 4 | 31.10.2008 14:03 |