![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| AKATAN |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 30.9.2008 Где: Украина Репутация: нет Всего: 1 |
Здравствуйте!
Есть некая структура:
Есть массив содержащий данные, которые хочу скопировать в структуру.
Соответственно возникает: Access violation at address 004097A8 in module 'DpSRV.exe'. Write of address F7780040. Когда делаю так:
То структура заполняется верно. Понятно, что из-за того что суммарная длинна данных до динамического массива 16 байт. Прошу, очень прошу растолковать как же храниться моя структура в памяти, и почему мое копирование вылазит за ее пределы. З.Ы. Брейкпоинты хорошего ничего не дали, а дебаггер не помог, ибо я потерялся в over9000 инструкций добавленных компилятором. |
||||||
|
|||||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
DeviceData : array of byte; это указатель
Лучшее что можно сделать
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| AKATAN |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 30.9.2008 Где: Украина Репутация: нет Всего: 1 |
Alexeis, спасибо, но как в массив
можно поместить скажем 182 байта? SetLength тут уже не применить. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Создаешь указатель на TDevGateProto и выделяешь памяти sizeof(TDevGateProto) + 182; (при помощи getmem разумеется). -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| AKATAN |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 30.9.2008 Где: Украина Репутация: нет Всего: 1 |
упс! точно! Спасибо! И все же, я чуть в замешательстве:
Когда заполняю структуру ручками:
То при ее копировании:
массив RawData заполняется вполне адекватно, что не ясно, в связи с тем, что DeviceData указатель. З.Ы. А как можно глянуть на мою структуру в дампе памяти посредством Embarcadero Delphi 2010? |
||||||||
|
|||||||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Ничего удивительного, просто копируется указатель. Но вот если теперь одна из структур будет удалена, то массив пойдет лесом в обеих копиях. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| AKATAN |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 30.9.2008 Где: Украина Репутация: нет Всего: 1 |
Alexeis, еще раз спасибо.
Структуру менять не могу, ибо почти в такой форме (там пару блоков динамических данных) она приходит с пару сотен устройств, вот и хотел сделать некое подобие абстракции, чтоб облегчить себе жизнь, а не использовать прямую адресацию, с указанием сдвига. Буду артистично использовать getmem, может что нить структурное и выйдет. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Ну устройство не может создать массив в стиле делфи. Тогда следует описать так.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| AKATAN |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 30.9.2008 Где: Украина Репутация: нет Всего: 1 |
Устройство присылает один единый массив данных, который описывается протоколом, но длинна блоков данных может быть разная. Спасибо за идею с getmem, совсем я перестал думать. пора списывать. В принципе, сделал более-менее добротную структуру. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |