Безопасные указатели25.02.2024, 17:29. Показов 2979. Ответов 22
Метки нет (Все метки)
Всем привет! Давно не писал сюда. Тему указателей, я затрагивал не раз, но желаемого консенсуса не смог достичь из этой темы, а именно безопасных указателей.. Может уместнее сказать линк, поскольку указатель - это и адресс в памяти, а линк наверное более объемлющее понятие, подходящее для переменной ссылочного типа, о чем пойдет речь. Что я имею в виду под безопасным, это такой линк, который можно инициализировать в переменную уровня модуля, и использовать в разных процедурах. Такой линк можно создать с помощью массива , но в случае сбоя или ошибки он непременно вызовет полный краш. В условиях прги на VB6 это не является проблеммой, поскольку скомпилированная программа должна существовать без ошибок, а любая ошибка - так или иначе крах. В VBA немного другая ситуация, там в случае не исправленной ошибки VBA также падает, (также может случиться что-то вроде "потери состояния"), что в общем не должно приводить к краху осноного приложения. Но вот в частности, всеж-таки это проихсодит при наличии лишних указателей в памяти. Однако сегодня внезапно я обнаружил, возможность создать, такие безопасные указатели/линки с помощью типа variant.
Решил я проверить, как работает передача разных переменных в функцию, с аргументами заданными как variant. И как выяснилось довольно не плохо работает. Как выясниось variant позволяет передавать по ссылке аргументы любого (стандартного) типа (Byte, Integer и т.д.). Я раньше задумывался над тем, как в VB реализовать аргумент по типу As Any, и можно сказать Variant в какой-то мере позволяет это сделать. Также, можно создать ссылку-указатель на уровне модуля и использовать ее в разных процедурах и при случае сбоя или ошибки, она не вызовет полный крах приложения. Есть, конечно нюансы. Вариантные пременные-ссылки должны быть в стеке, т.е. передаваться как аргументы,в ином случае ссылка слеатает. Другой нюанс в ниже приведенном коде. Ключевое действие происходит в процедуре "Пример" и "testtest". После строчки "vPtr1 = StrPtr(s) + 2 * 2" если в переменной vPtr2 поменят код символа, то должна меняться 3я буква в строке "s". В 32bit работат, в x64 почему-то нет, надеюсь на комментарии
2
|
||||||
| 25.02.2024, 17:29 | |
|
Ответы с готовыми решениями:
22
Безопасные скрипты Безопасные пути безопасные среды |
| 11.10.2024, 22:13 [ТС] | ||||||
|
Поскольку, как недавно обнаружилось, оператор With основан на ByRef-механизме (назовем его так), появилась идея у меня, что если функцию объявить как Static, тогда все переменные в ней будут не стираемые, а значит и With-переменные тоже будут нестираемые, т.е. их можно будет использовать как не освобождаемые BtRef-ссылке. Может быть не совсем понятно, но, в принципе на деле все немножко не так, хотя в принципе эти неосвобождаем
Если в статик переменных прописать UDT-переменную (самую первую), то на определенном отрицателном смещении (оно бывает разное) от первой переменной в стеке прописывается указатель на эту переменную. Если этот указатель поменять, то UDT переменная будет мапиться уже на этот новый указатель. Такая фишка наблюдается только в самой первой группе статик -переменных. К слову сказать каждая группа (строка объявления) статик переменных находится как бы в отдельном стеке и в др. группах я к сож. не обнаружил такой же фишки. Проверял сначала на VBA, работает не совсем стабильно если выполнять пошагово, но при обычном выполнении вроде бы нормально. На VB6 в IDE это тоже работает. Пример:
2
|
||||||
| 12.10.2024, 10:22 [ТС] | |||||||
|
Но это вроде бы не правильно, потому, что если сделать 2 процедуры, с подобными манипуляциями, то во второй уже не находится нужный уазатель, могжет быть даже вылет в исключение.
Добавлено через 2 часа 1 минуту Добавлено через 1 час 30 минут Static и Public в одном стеке
0
|
|||||||
| 27.07.2025, 07:42 [ТС] | |
|
Стоит сказазть и об этом, на ряду с тем, поскольку в том модуле как раз используются безопасные указатели (или ссылки, референсы, как удобнее). Фокус заключается в установке параметра .cLocks = 1 дескриптора массива, после чего дескриптор массива не освобождается при выходе из зоны видимости (как принято говорить у программистов), а это значит, массив после этого можно использовать как безопасную ссылку.
0
|
|
| 27.07.2025, 07:42 | |
|
Безопасные запросы по АПИ Самые безопасные оптимизаторы и деинсталляторы Какие ЖК мониторы сейчас самые безопасные? Динамическое программирование: найти безопасные пути для кузнечика Указатели и указатели на указатели, а также типы данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|