![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Доброго времени!
В программе есть много VirtualTree(TVirtualStringTree) которые отображают разные данные. Чтобы привести все в более нормальный вид, и минимальный размер памяти занимаемый данными в Node'ах, написал такое: Код:
Вот так получаю содержимое ветки: Код:
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]() Код:
Не стесняемся, плюсуем!
![]() |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Неа, указывает вообще на мусор..
Код:
Код:
1. Почему в Kind - не то, что над 2. Данные по указателю не читабельны... |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Манипуляции с Pointer на примере ListView
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 08.04.2013 в 16:22. |
![]() |
![]() |
![]() |
#5 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Цитата:
Намек я понял. Но вот в чем фокус: Как в этом цикле сделать так чтобы Data всегда было в разных местах, т.е. каждый раз новый Data с, соответственно, новыми данными. |
|
![]() |
![]() |
![]() |
#7 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
![]()
ну либо через указатель, как у Аватар, или помнить что рекорд это валью тайп и сделать копирование, но оно бедет не красиво т.к. не явное.
|
![]() |
![]() |
![]() |
#8 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Data в данном случае - кусок данных со стека, по факту указатель, в его значении лежит мусор, указывающий в бездну. Вы затираете что-то, что лежит по указателю, тупо нулями, так-то это могла быть и нужная инфа ) Ну или ав получали бы. Обращаясь в любом методе к этому сохранённому указателю, мы имеем обращение к некой памяти, на которую указывает мусорное число со стека в момент вызова метода, где сохраняем указатель. Одинаковый мусор чисто по стечению обстоятельств, главное из которых - одна и та же последовательность вызовов методов, ведь Вы тестируете по идее вызывая одну и ту же цепочку методов. А обнуление вообще не даёт ничего, кроме вероятности получить ав при записи нулей неизвестно куда. Вроде гетмем кстати даже сам инициализирует поля , исходя из типипизированного указателя.
Ка предложил Аватар, память надо выделить гетмемом, при этом в переменную-указатель data запишется указатель на созданную в куче структуру. Этот указатель Вы сохраните в ноде (грубо говоря это же обычное число, только Вы и знаете, что это число адрес памяти где лежит Ваша структура). На новом шаге цикла надо ровно также вызвать гетмем - в переменную просто запишется новое число-указатель на вновь созданную ещё где-то в куче нужную структуру, а старый указатель уже сохранён в ноде, беспокоиться о нём не надо. С кучи структуры никуда не денутся, как и должно быть, и впоследствии на Вас лежит задача убиения этих данных, ориентируясь по сохранённому в ноде указателю, об этом также расписано в коде у Аватар Последний раз редактировалось phomm; 09.04.2013 в 20:10. |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
Нет, хоть убей - не заработает.
У меня есть TreeView(TVirtualStringTree, если быть точным). При добавлении Node: Tree.AddChild(ParentNode, UserData:Pointer). Вторым параметром идет указатель на данные. Обычно я делаю так: Код:
Когда надо получить данные из Node делаю так: Код:
Потому, я при думал это: Код:
Добавляю так: Код:
TNodeData я спокойно считываю. А вот как из указателя забрать то, что я хочу? Код:
Код:
Код:
Как быть? Уже дыру в этой статье прожёг. Последний раз редактировалось Человек_Борща; 09.04.2013 в 21:01. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]() Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Использование record в record | Anton911 | Общие вопросы Delphi | 7 | 03.05.2012 08:49 |
Record | SasukeUciha | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 16.10.2011 12:01 |
В чём различие записей Record от Packed Record? | Terran | Общие вопросы Delphi | 7 | 08.06.2010 17:14 |
Record / Packed Record | Alex Cones | Общие вопросы Delphi | 7 | 11.11.2009 10:43 |
[C] массивы, указатели, двойные указатели. | Iggel | Общие вопросы C/C++ | 5 | 05.05.2009 12:39 |