Попытка чтения или записи в защищенную память как исправить

Симптомы

При возврате файлов в Microsoft Visual Studio 2005 Team System, может появиться следующее сообщение об ошибке:

Попытка чтения или записи в защищенную память

Как правило эта проблема возникает после нажатия кнопки фильтра для решения в Visual Studio 2005 Team System.

Решение

Сведения об исправлении

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему. Это исправление может проходить дополнительное тестирование. Таким образом если вы не подвержены серьезно этой проблеме, рекомендуется дождаться следующего пакета обновления, содержащего это исправление.

Чтобы загрузить это исправление из коллекции кода MSDN, посетите следующий веб-узел корпорации Майкрософт:

http://code.msdn.microsoft.com/KB922531

Примечание. Коллекции кода MSDN отображаются языки, для которых доступно исправление. Если в списке язык не отображается, это недоступности страница коллекции кода для этого языка.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Чтобы получить полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание, посетите следующий веб-сайт корпорации Майкрософт:

http://support.microsoft.com/contactus/?ws=support

Предварительные условия

Для установки предварительные компоненты не требуются.

Необходимость перезагрузки

После установки исправления компьютер необходимо перезагрузить.

Сведения о замене исправлений

Это исправление не заменяет других исправлений.

Сведения о файлах

Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, откройте вкладку Часовой пояс элемента Дата и время в панели управления.

Имя файла

Версия файла

Размер файла

Дата

Время

Microsoft.VisualStudio.TeamFoundation.VersionControl.dll

8.0.50727.202

593,920

25-Aug-2006

06:36

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе “Относится к”.

Дополнительные сведения

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Проблемы после перехода на новую версию обновлятора    оглавление    Ошибка инициализации модуля: модуль внешнего соединения

2021-10-14T00:32:45+00:00

Ошибка происходит при попытке обновлятора подключиться к базе через COM. Полный текст ошибки такой:

Адресат вызова создал исключение. <= Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена. в System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
22:13:58 в System.RuntimeType.InvokeMember

Помогает переустановка платформы 1с и/или переход на следующий релиз.

Внимание. Если у вас версия платформы 8.3.20.1549, то вам сюда.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Проблемы после перехода на новую версию обновлятора    оглавление    Ошибка инициализации модуля: модуль внешнего соединения

VoltDeMar

18 / 18 / 4

Регистрация: 05.06.2012

Сообщений: 1,020

1

Попытка чтения или записи в защищенную память

15.08.2013, 14:43. Показов 39639. Ответов 12

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте! Вот такая ошибка:
“Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.”
при попытке выполнить функцию импортированную из библиотеки setupapi.dll, вот таким образом:

C#
1
2
 [DllImport("setupapi.dll", EntryPoint = "SetupDiGetHwProfileList")]
        public static extern void SetupDiGetHwProfileList(out StringBuilder HwProfileList, string HwProfileListSize, out StringBuilder RequiredSize, out StringBuilder CurrentlyActiveIndex);



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

15.08.2013, 14:43

12

1057 / 864 / 195

Регистрация: 31.03.2010

Сообщений: 2,521

15.08.2013, 14:45

2

StringBuilder статический класс, попробуйте заменить на string или char[] или char*



0



340 / 340 / 90

Регистрация: 04.03.2010

Сообщений: 648

15.08.2013, 15:01

3

несоответствие типов, курите мануалы по dll’ке



1



18 / 18 / 4

Регистрация: 05.06.2012

Сообщений: 1,020

15.08.2013, 15:36

 [ТС]

4

Цитата
Сообщение от Learx
Посмотреть сообщение

StringBuilder статический класс, попробуйте заменить на string или char[] или char*

Не помогает.

Добавлено через 34 минуты

Цитата
Сообщение от andrew_w2k
Посмотреть сообщение

несоответствие типов, курите мануалы по dll’ке

Как бы узнать какой тип соответствует PDWORD в C# ??



0



1270 / 971 / 113

Регистрация: 12.01.2010

Сообщений: 1,971

15.08.2013, 15:54

5

прочитать его название
p – указатель
d – двойной
word – слово (2 байта, так уж сложилось исторически)
-> указатель на двойное слово
-> указатель на 4 байта
-> обычный Int

Добавлено через 2 минуты
а проще создать проект с++, написать PDWORD, правомышью клик и “перейти к определению”



0



18 / 18 / 4

Регистрация: 05.06.2012

Сообщений: 1,020

15.08.2013, 16:10

 [ТС]

6

m0nax, В это вник, не могу понять как так, функция возвращает “1” хотя должна вернуть список ID устройств подключенных к компьютеру, или это указатель на первый элемент массива содрежащий список?
Если так может посоветуете как его считать?



0



1057 / 864 / 195

Регистрация: 31.03.2010

Сообщений: 2,521

15.08.2013, 16:12

7

почитайте статью посмотрите внимательно пример и поймете куда сохраняются данные.



0



340 / 340 / 90

Регистрация: 04.03.2010

Сообщений: 648

15.08.2013, 16:13

8

Цитата
Сообщение от VoltDeMar
Посмотреть сообщение

В это вник, не могу понять как так, функция возвращает “1” хотя должна вернуть список ID устройств подключенных к компьютеру, или это указатель на первый элемент массива содрежащий список?

по-моему, в описании она bool возвращает



0



18 / 18 / 4

Регистрация: 05.06.2012

Сообщений: 1,020

15.08.2013, 16:17

 [ТС]

9

Цитата
Сообщение от Learx
Посмотреть сообщение

почитайте статью посмотрите внимательно пример и поймете куда сохраняются данные.

Я в общих чертах представляю что есть ссылочный тип данных, однако на что вы мне хотите указать не понял.

Добавлено через 1 минуту

Цитата
Сообщение от andrew_w2k
Посмотреть сообщение

по-моему, в описании она bool возвращает

Я пытаюсь получить параметры помеченные как Out ведь они, я так понимаю, тоже должны возвращаться?



0



340 / 340 / 90

Регистрация: 04.03.2010

Сообщений: 648

15.08.2013, 16:20

10

Цитата
Сообщение от VoltDeMar
Посмотреть сообщение

тоже должны возвращаться

передаются по ссылке



0



VoltDeMar

18 / 18 / 4

Регистрация: 05.06.2012

Сообщений: 1,020

15.08.2013, 16:24

 [ТС]

11

Цитата
Сообщение от andrew_w2k
Посмотреть сообщение

передаются по ссылке

т.е в ссылку на переменную которую я передаю в функцию?
Объявлены:

C#
1
2
 [DllImport("setupapi.dll", EntryPoint = "SetupDiGetHwProfileList")]
        public static extern bool SetupDiGetHwProfileList(out int HwProfileList, string HwProfileListSize, out int RequiredSize, out int CurrentlyActiveIndex);

Переданы:

C#
1
2
3
4
5
   bool f = SetupDiGetHwProfileList(out val1, "5", out val2, out val3);
            if ( f == true)
            label9.Text = "true " + val1 + " " + val2 + " " + val3;
            else
            label9.Text = "false " + val1 + " " + val2 + " " + val3;



0



NickoTin

Почетный модератор

Эксперт .NET

8714 / 3666 / 404

Регистрация: 14.06.2010

Сообщений: 4,513

Записей в блоге: 9

15.08.2013, 16:34

12

Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

О ужас, откуда Вы string/StringBuilder взяли? Почему void возвращает? Почитайте документацию по функции, там нигде даже намека на использование строк нет.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        [DllImport("setupapi.dll", SetLastError = true)]
        public static extern bool SetupDiGetHwProfileList(
            [Out] int[] HwProfileList,
            int HwProfileListSize,
            out int RequiredSize,
            out int CurrentlyActiveIndex
            );
 
        private const int ERROR_INSUFFICIENT_BUFFER = 122;
 
        static void Main(string[] args)
        {
            int[] profileList = null;
            int profileListSize = 0;
            int activeIndex = 0;
 
            SetupDiGetHwProfileList(profileList, profileListSize, out profileListSize, out activeIndex);
 
            if (ERROR_INSUFFICIENT_BUFFER != Marshal.GetLastWin32Error())
                throw new Win32Exception();
 
            profileList = new int[profileListSize];
            if (!SetupDiGetHwProfileList(profileList, profileListSize, out profileListSize, out activeIndex))
                throw new Win32Exception();
 
            Console.ReadKey();
        }

Добавлено через 7 минут

Цитата
Сообщение от VoltDeMar
Посмотреть сообщение

список ID устройств подключенных к компьютеру

Данная функция возвращает список профилей оборудования которые существуют в системе.
Hardware profiles overview



1



1057 / 864 / 195

Регистрация: 31.03.2010

Сообщений: 2,521

15.08.2013, 16:42

13



0



Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена

Я надеюсь, что кто-то может просветить меня, что могло быть причиной этой ошибки:

попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.

Я не могу опубликовать код, потому что эта ошибка, похоже, брошена в любой случайной области приложения. Приложение будет работать в любом месте от 12-48 часов до возникновения ошибки. Иногда он останавливается в кажущемся случайным месте и бросает вышеуказанная ошибка, в других случаях все приложение останавливается, и я получаю экран с ошибкой, которая говорит что-то вроде «была фатальная ошибка. Это может быть ошибка в CLR или. «что-то о PInvoke или другой соответствующей информации. Когда это происходит, все потоки отображаются завершенными, и отладочная информация недоступна.

в двух словах это так:

его многопоточное серверное приложение, написанное полностью на C#. Клиенты подключаются к серверу через сокет. Сервер запускает виртуальную» среду » для клиентов, где они могут взаимодействовать друг с другом и средой. Он потребляет довольно много памяти, но я не вижу, чтобы она протекала. Он обычно потребляет около 1,5 ГБ. Я не думаю, что его утечка, потому что использование памяти остается относительно постоянным все время работы приложения. Его постоянно работающий код для поддержания среды, даже если клиенты ничего не делают. Он не использует 3rd party программное обеспечение или другие API. Единственными внешними ресурсами, которые использует это приложение, являются соединения сокетов и подключения к базе данных SQL. Работает на 64-битном сервере. Я попытался отладить это в VS2008 & VS2010 с помощью .net 2.0, 3.5 и 4.0 и на нескольких серверах, и проблема все еще в конечном итоге возникает.

Я попытался отключить оптимизацию компилятора и несколько исправлений microsoft. Ничто, кажется, не заставляет эту проблему уйти. Было бы полезно, если кто-нибудь знает какие-либо возможные причины, или какой-то способ определить, что вызывает проблему.

18 ответов

Я только что столкнулся с этой проблемой в VS 2013 .NET 4.5 с DLL MapInfo. Оказывается, проблема заключалась в том, что я изменил платформу для сборки с x86 на любой процессор, и этого было достаточно, чтобы вызвать эту ошибку. Изменение его обратно на x86 сделало трюк. Может помочь кому-нибудь.

наконец-то отследил это с помощью WinDBG и SOS. Нарушение доступа было вызвано какой-то неизвестной DLL. Оказывается, часть программного обеспечения под названием «NVIDIA Network Manager» вызывала проблемы. Я читал бесчисленное количество раз, как эта проблема может быть вызвана брандмауэрами или антивирусами, ни один из которых я не использую, поэтому я отклонил эту идею. Кроме того, я был в предположении, что это не было окружающей средой, потому что это происходит на более чем 1 сервере с использованием другого оборудования. Получается все машины, на которых я тестировал это, работали под управлением «Nvidia Network Manager». Я считаю, что он устанавливается с остальными драйверами материнской платы.

надеюсь, это поможет кому-то, так как эта проблема мучила мое приложение в течение очень долгого времени.

попробуйте выполнить эту команду

Я также столкнулся с этой проблемой с Visual Studio 2010. Более интересно, что у меня было несколько проектов в моем решении (консольное приложение, приложение WPF, приложение Windows Forms), но он терпел неудачу только тогда, когда я устанавливал проект, который был типа «консольное приложение» как проект запуска (даже для тех, у которых буквально не было кода или каких-либо дополнительных сборок, упомянутых кроме стандартных, которые поставляются с самим шаблоном проекта).

после изменения, наконец помог мне разобраться в проблеме: перейти к свойствам проекта консольного приложения project — > перейти к Debug tab — > перейти к в правой панели -> Регистрация Enable unmanaged code debugging флажок, как показано на снимке ниже. Первопричина того, почему это произошло, мне до сих пор неизвестна. Единственное, что я заметил, было то, что было много обновлений windows, которые были установлены на моей машине прошлой ночью, которые в основном состояли из обновлений office и обновлений ОС (более десятка КБ статьи.)

enter image description here

эта ошибка не должна возникать в управляемом коде. Это может решить проблему:

перейдите в отладчик Visual Studio, чтобы обойти это исключение:

надеюсь, это поможет.

проблема может быть из — за смешанных платформ сборки DLL в проекте. Я. e вы создаете свой проект для любого процессора, но имеете некоторые библиотеки DLL в проекте, уже построенном для платформы x86. Это вызовет случайные сбои из-за различного сопоставления памяти 32-битной и 64-битной архитектуры. Если все библиотеки DLL построены для одной платформы, проблема может быть решена.

У меня была эта проблема недавно, когда я изменил сервер разработки для проекта. Я получал эту ошибку в строке кода, где я объявил новую переменную OracleConnection.

после многих попыток, включая установку исправлений, я попытался изменить ссылки Oracle.DataAccess и система.Данные.OracleClient в проекте, и это сработало!

когда проект перемещается на новую машину, я предлагаю вам обновить все ссылки, добавленные в этот проект.

Я столкнулся и нашел решение этого исключения сегодня. Это произошло, когда я пытался отладить модульный тест (NUnit), который вызвал виртуальный метод в абстрактном классе.

проблема, похоже, связана с установкой .NET 4.5.1.

Я загрузил .NET 4.5.2 и установил (мои проекты по-прежнему ссылаются на .NET 4.5.1), и проблема решена.

Исключение соединения IBMDB2 OLeDB «Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена»

Столкнулся с очень странной проблемой при работе ниже программы на целевой платформе x64. он абсолютно нормально работает на x86.

Действия по воспроизведению:

  1. сервер db2 установлен на удаленном компьютере
  2. клиент db2 установлен на локальном компьютере
  3. теперь запустите эту программу (только после изменения целевой платформы AnyCpu на x64). тогда проблема возникает в OleDbCommand.ExecuteReader ();

СТРАННОЕ ПОВЕДЕНИЕ: на платформе x86. эта программа работает нормально.

P.S .: Проверял эту программу. он работает со всеми серверами, такими как SQL, MySQL, Oracle и т. д., проблема только с Сервер IBMDB2

ИЗМЕНИТЕ свой вопрос в уточнить, какую именно версию клиента Db2 вы используете и кто является поставщиком? (MS или IBM) и т. д.

Я использую клиент IBM DB2 11.1 x64bit. Я сталкиваюсь с этой проблемой только тогда, когда меняю целевую платформу на x64 с Visual Studio 2015. Однако она отлично работает с целевой платформой Visual Studio x86.

На каких выпусках Windows x64 он не работает? На каких 32-битных выпусках он работает?

Я запускаю эту программу через Visual Studio 2015 на машине с Windows 2k12 R2 64 бит. проблема возникает только тогда, когда я меняю целевую платформу моей программы на x64. через щелчок правой кнопкой мыши-> программа-> Свойства-> цель платформы. он работает с AnyCpu и x86, но не с x64

Попытка чтения или записи защищенной памяти. Это часто свидетельствует о том, что другая память повреждена

Я надеюсь, кто-то может просветить меня о том, что может вызвать эту ошибку:

Попытка чтения или записи защищенной памяти. Это часто свидетельствует о том, что другая память повреждена.

Я не могу опубликовать код, потому что эта ошибка, похоже, попадает в любую случайную область приложения. Приложение будет запускаться от 12 до 48 часов, прежде чем выбросить ошибку. Иногда он останавливается в кажущемся случайном месте и бросает вышеприведенную ошибку, иногда все приложение останавливается, и я получаю экран с ошибкой, которая говорит что-то вроде строки «Была фатальная ошибка в. Это может быть ошибка в CLR или. » что-то о PInvoke или другой не относящейся к делу информации. Когда это происходит, все потоки прекращаются и недоступна информация для отладки.

Вкратце это то, что делает приложение:

Это многопоточное серверное приложение, написанное полностью на С#. Клиенты подключаются к серверу через сокет. Сервер запускает виртуальную «среду» для клиентов, где они могут взаимодействовать друг с другом и с окружающей средой. Он потребляет довольно много памяти, но я не вижу его утечки. Обычно он потребляет около 1,5 ГБ. Я не думаю, что это утечка, потому что использование памяти остается относительно постоянным все время работы приложения. Его постоянно действующий код для поддержания среды, даже если клиенты ничего не делают. Он не использует стороннее программное обеспечение или другие API. Единственными внешними ресурсами, которые использует это приложение, являются соединения сокетов и соединения базы данных SQL. Он работает на 64-битном сервере. Я попытался отладить это в VS2008 и VS2010 с использованием .net 2.0, 3.5 и 4.0 и на нескольких серверах, и проблема все еще в конечном итоге возникает.

Я попытался отключить оптимизацию компилятора и несколько горячих исправлений для Microsoft. Ничто, похоже, не устраняет эту проблему. Было бы хорошо, если кто-нибудь знает какие-либо возможные причины или какой-то способ определить, что вызывает проблему.

С чем может связана ошибка:

Попытка чтения или записи в защищенную память. Это часто
свидетельствует о том, что другая память повреждена.

Написан проект на c# и dll на c++, по отдельности компилируется без ошибок, но когда запускаешь проект, доходит до второй функции (написанной в dll) и выдает эту ошибку.

Alexander Semikashev's user avatar

задан 20 дек 2016 в 12:22

Sergey's user avatar

Это означает что вы пытаетесь писать или читать по адресу памяти, который не принадлежит вашей программе. Например, вы можете писать или читать память за пределами динамически выделенного массива, или обращаться к памяти по null-указателю.

То, что программа компилируется, не означает, что она корректная.

ответ дан 20 дек 2016 в 12:28

Vlad from Moscow's user avatar

Vlad from MoscowVlad from Moscow

44.6k3 золотых знака37 серебряных знаков89 бронзовых знаков

11

Добавить комментарий