Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 10
.NET 6

Работа с указателями (System.AccessViolationException)

31.01.2022, 22:07. Показов 398. Ответов 4

Студворк — интернет-сервис помощи студентам
Код во вложении. Суть в следующем, создаю три переменных - int, long, int. Получаю указатель на первую переменную, дальше меняю адресс указателя так, что он теперь ссылается на третью переменную(вычитаю 12 байтов - 4 int и 8 long), при использовании архитектуры x32 всё работает и вывод корректный. При использовании x64 при попытке получить значение по указателю выпадает исключение System.AccessViolationException. Можете подсказать почему так происходит, память по данному адрессу то принадлежит приложению.
Миниатюры
Работа с указателями (System.AccessViolationException)  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.01.2022, 22:07
Ответы с готовыми решениями:

System.AccessViolationException не обработано Message: Попытка чтения или записи в защищенную память
AccessViolationException Сторонние библиотеки не использовал. Как избавиться от такого прерывания работы ? Добавлено через 13 минут ...

Необработанное исключение типа "System.AccessViolationException"
Здравствуйте уважаемые программисты. У меня произошла такая ситуация: Писал прогу в VS 2010 на C#, дописал его, скомпилил, всё работало...

Unsafe "System.AccessViolationException"
Привет ребят. Есть такой код. Ищет одну картинку на другой. Когда передаю в функцию CheckForMatch(bit, 1600, 900, bit2, 1, 1) - все...

4
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
31.01.2022, 22:12
Кто вам вообще сказал что переменные в памяти находятся подряд и вы просто так можете вычислить их адрес?
0
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 10
31.01.2022, 22:17  [ТС]
Если они создаются подряд то велик шанс, что они встанут подряд (в большинстве случаев так и есть), когда я запускаю на x86, всё работает как надо, так же тестил с обычным инкрементированием указателя на int, и он действительно выводит значение следующей переменной. Я понимаю как работает память в .net, и не заявляю, что переменные идут в памяти подряд, и задаю вопрос вообще о другом, почему при сборке на x86 исключение не создаётся, а на x64 выдаётся исключение что совершается попытка к защищённой памяти.

Добавлено через 1 минуту
Можете сами взять этот код и потестить, или создать свои тесты и убедиться что всё работает так, как я заявляю (конечно в некоторых случаях по вычесленному адрессу не будет той переменной, но это исключительный случай)
0
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 10
31.01.2022, 22:23  [ТС]
Просто дело в том что если просто отнять значения напрямую из указателя, то код будет работать на x64 архитектуре, и действительно выведет 3.
Миниатюры
Работа с указателями (System.AccessViolationException)  
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
31.01.2022, 22:23
Цитата Сообщение от Danissimo13 Посмотреть сообщение
почему при сборке на x86 исключение не создаётся, а на x64 выдаётся исключение что совершается попытка к защищённой памяти
Как минимум потому что:
- неправильно вычисляется адрес переменной
- проиcходит повреждение указателя кастом его к int, т.к. на x64 указатель 8 байт (IntPtr, UIntPtr, long, ulong)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2022, 22:23
Помогаю со студенческими работами здесь

Работа с указателями
1) скажите кто-нибудь что здесь происходит int* fib = stackalloc int; int* p = fib; *p++ = *p++ = 1; //особенно интересует это......

Работа с указателями и битовые операции (с C++ в C#)
Помогите перевести это в эффективный C# код :) int UnknownFunc0001(signed int a1) { return ((a1 >> 24) & 0xFF) + ((((a1...

Работа с указателями на экземпляры классов
чтото не пойму. Я могу както создать указатель, который указывал бы ка экземпляр класса (а не структуры) ? т.е. так: class Program...

System.AccessViolationException
Есть текстбокс на форме, при изменении текста в нем происходит запрос к бд и заполняется AutocompleteCustomSource. Часто при вводе...

Исключение System.AccessViolationException
Здравствуйте! Пишу С# приложение под Windows 7 — всё работает стабильно и правильно. Запускаю программку в Windows XP — в коде возникает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru