|
0 / 0 / 0
Регистрация: 05.06.2019
Сообщений: 10
|
|
.NET 6 Работа с указателями (System.AccessViolationException)31.01.2022, 22:07. Показов 400. Ответов 4
Код во вложении. Суть в следующем, создаю три переменных - int, long, int. Получаю указатель на первую переменную, дальше меняю адресс указателя так, что он теперь ссылается на третью переменную(вычитаю 12 байтов - 4 int и 8 long), при использовании архитектуры x32 всё работает и вывод корректный. При использовании x64 при попытке получить значение по указателю выпадает исключение System.AccessViolationException. Можете подсказать почему так происходит, память по данному адрессу то принадлежит приложению.
0
|
|
| 31.01.2022, 22:07 | |
|
Ответы с готовыми решениями:
4
System.AccessViolationException не обработано Message: Попытка чтения или записи в защищенную память Необработанное исключение типа "System.AccessViolationException" Unsafe "System.AccessViolationException" |
|
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.
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
|
||
| 31.01.2022, 22:23 | ||
|
- неправильно вычисляется адрес переменной - проиcходит повреждение указателя кастом его к int, т.к. на x64 указатель 8 байт (IntPtr, UIntPtr, long, ulong)
0
|
||
| 31.01.2022, 22:23 | |
|
Помогаю со студенческими работами здесь
5
Работа с указателями Работа с указателями и битовые операции (с C++ в C#) Работа с указателями на экземпляры классов System.AccessViolationException Исключение System.AccessViolationException Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|