|
4 / 4 / 4
Регистрация: 21.04.2014
Сообщений: 139
|
||||||
Получить определенные поля класса, работая с указателем на класс, как с указателем на массив21.06.2014, 19:11. Показов 1911. Ответов 10
Метки нет (Все метки)
Мне бы хотелось узнать в чем ошибка моего кода
Вот мои наработки которые не работают где я пытаюсь получить текст из второго поля зная адрес первого
0
|
||||||
| 21.06.2014, 19:11 | |
|
Ответы с готовыми решениями:
10
Как получить доступ к элементам массива работая с ним как с указателем и адресной арифметикой Конструктор копирования для класса с указателем на абстрактный класс В чем разница между указателем и указателем на указатель? |
|
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
|
||
| 21.06.2014, 21:29 | ||
|
sizeof(TEdit*) - не факт что ты попадешь на следующий эдит. Память динамическая, соотв. Эдиты могут быть разных размеров. Добавлено через 14 секунд Без указателя на конкретный участок памяти - никак
0
|
||
|
|
||
| 22.06.2014, 11:47 | ||
|
A_N_A_N_A_S, твоя ошибка в предположении, что с полями класса можно без заморочек работать, как с массивом. Это не совсем так, хотя и возможно. Любой класс и в самом деле представлен в памяти, как структура со всеми данными класса подряд, но в данном случае есть проблемы - класс формы содержит сотни полей данных, большая часть из которых унаследована, плюс указатель на таблицу виртуальных функций, но это уже детали. Поэтому указатели на твои эдиты будут находится в самом конце области памяти, выделенной под данные класса формы. Короче, кнопочку, что ты написал, для достижения результата придется тыкать много-много раз. Полюбопытствуй. Это так, лирическое отступление. На самом деле пользоваться таким подходом для тебя нет причин. Есть множество более простых путей, один из которых и был представлен D1973.
2
|
||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|||
| 24.06.2014, 14:16 | |||
Сообщение было отмечено BRcr как решение
Решение1) Где гарантии того, что второй эдит расположен в памяти позже первого? (куда его аллокатор положит, там он и будет) 2) Где гарантии того, что сместив указатель, вы не выйдете за границы выделенной вашей программе памяти? (что скорее всего и произошло) 3) Где гарантии того, что нарезая всю память программы по размеру одного эдита, вам не попадется что-то меньшее/большее, что сместит чтение так, что, когда вам все же попадется требуемый эдит, от него обрежется лишь часть? (это если забегать вперед к циклу) Нарисую свою любимую картинку. Давно я в них не упражнялся: P.S. Вот, еще может быть интересно: Создать 8-мерный массив
2
|
|||
|
|
||||||
| 24.06.2014, 19:50 | ||||||
Сообщение было отмечено BRcr как решение
Решение
Раз пошла такая пьянка, я поэкспериментировал и вывел способ обойти все, указанные камрадом SatanaXIII, сложности.
![]()
1
|
||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 25.06.2014, 09:18 | |
|
0
|
|
|
|
|||||||||||
| 25.06.2014, 20:33 | |||||||||||
|
Не, неправильно я написал. sizeof( TForm1 ) возвращает 960 байт, а значит, предыдущий код сканирует память еще почти на мегабайт за область класса.
Правильно было бы вот так:
Если чуток расширить область:
Подумал, что это из-за published заморочки хитрые у компилятора с размещением объектов в памяти. Сделал в паблике свой указатель на эдит, инициализировал в конструкторе - один черт не находит его. Короче, я понял, что ничего я не понял.
0
|
|||||||||||
|
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
|
||||||
| 26.06.2014, 05:25 | ||||||
|
BRcr, Это происходит из-за того, что сканируя память, выделенную под класс, вы получаете адреса не объектов классов TEdit, TMemo и других, а адреса переменных, которые хранят эти адреса. Накидал по-быстрому код (поэтому не столь красиво, как у вас), который сканирует память класса:
PS: На форме кнопка и едит. После нажатия кнопки отображается информация о 218 исключениях и надпись в едите "This Edit is Find".
0
|
||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 26.06.2014, 08:32 | |
|
Я вообще изначально думал не о конкретной форме, а о сканировании всего приложения.
0
|
|
|
|
|||||||||||
| 27.06.2014, 19:22 | |||||||||||
|
Спасибо kodv.
Так все верно работает. Предыдущие коды искали именно сами объекты, размещенные в куче, а не указатели на них. Поэтому при расширении области просмотра их и находило...Ну, и шлифанем это дело реальным визуальным представлением.
1
|
|||||||||||
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
| 01.07.2014, 10:08 | |
|
0
|
|
| 01.07.2014, 10:08 | |
|
Помогаю со студенческими работами здесь
11
Матрица как одномерный массив с указателем
Переделать функцию c указателем на int, на функцию с указателем на void Как сделать ассоциативный массив с указателем на структуру? ошибки с указателем на родительский класс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|