Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2009, 13:54   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Адреса элементов динамического массива меняются...

Всем привет!
У меня Delphi 2009. Просто я не знаю, в пред идущих версия существует такая проблема или нет....

Короче есть глобальный динамический массив из не-имеет-значения-чего.
И имеется что-то типа tListView где у каждого item-a в свойстве data указатель на элемент массива.

Проблема в том, что после добавления новых элементов в массив мне приходится заново выставлять всем item-ам свойство data, так как при добавлении новых элементов адрес первого, ну и соответственно всех остальных меняется. Никак нельзя этого избежать? Если, допустим, я знаю максимальный размер, до которого может разрастись массив?
Altera вне форума Ответить с цитированием
Старый 06.09.2009, 16:40   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Проблема в том, что после добавления новых элементов в массив мне приходится заново выставлять всем item-ам свойство data, так как при добавлении новых элементов адрес первого, ну и соответственно всех остальных меняется.
Бред сивой кобылы...
Данные в Data привязаны не к номеру итема, а к нему самому.
Как - в данном случае не имеет значения. Вы можете менять итем как вам заблагорассудится, но Data не изменится, пока вы сами его не измените.
Посему проблема ваша явно высосана из пальца...
mihali4 вне форума Ответить с цитированием
Старый 06.09.2009, 17:20   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Скорее всего, не меняя концепции хранения указателей, проблемы не избежать.
Добавление элементов предполагает перераспределение памяти (так работает менеджер памяти и от этого никуда не спрятаться), и построить программу на таком не стабильном материале не получится.
Отсюда следует, чтобы понять чего делать, не совсем "не-имеет-значения-чего" хранится в элементах массива.
ListView тоже можно рассматривать как массив, в элементак которого хранятся указатели и может быть, если присмотретьcя и упомянутый массив то не нужен.
Впрочем, все зависит от задачи, конечно.
Скандербег вне форума Ответить с цитированием
Старый 06.09.2009, 17:37   #4
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Бред сивой кобылы...
Данные в Data привязаны не к номеру итема, а к нему самому.
Как - в данном случае не имеет значения. Вы можете менять итем как вам заблагорассудится, но Data не изменится, пока вы сами его не измените.
Посему проблема ваша явно высосана из пальца...
У меня someItem.data := @someArray[x] а не someItem.data := x!
Altera вне форума Ответить с цитированием
Старый 06.09.2009, 18:39   #5
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
У меня someItem.data := @someArray[x] а не someItem.data := x!
Так напишите someItem.data := x и не будет проблем.
А если есть возможность избавьтесь от массива как написал Скандербег
s.Creator вне форума Ответить с цитированием
Старый 07.09.2009, 01:14   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
У меня someItem.data := @someArray[x]
Не нужно адрес в памяти хранить, нужно ссылку на объект хранить и все будет нормально, короче собака не нужна )
Конечно при условии, что "не-имеет-значения-что" является объектом.

Цитата:
Так напишите someItem.data := x
В данном случае x - индекс, не всегда так удобно, а если элементы будут удаляться из массива?
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.
mutabor вне форума Ответить с цитированием
Старый 07.09.2009, 07:31   #7
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
В данном случае x - индекс, не всегда так удобно, а если элементы будут удаляться из массива?
Чем не удобно?
У Altera привязка к массиву была не правильная. А если будет что то удалять из него то должен предусмотреть это.
А в Вашем варианте если он поменяет значение в массиве то Дата будет в лучшем случае указывать на старые данные, а в худшем на уничтоженный объект.
В общем все зависит от реализации и задумок Altera.

Последний раз редактировалось s.Creator; 07.09.2009 в 07:48.
s.Creator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. 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