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

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

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

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

В двух словах, это то, что делает приложение:

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

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

Ответы [ 22 ]

43 голосов
/ 15 августа 2013

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

18 голосов
/ 10 февраля 2011

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

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

14 голосов
/ 17 июня 2016

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

Следующее изменение, наконец, помогло мне решить проблему: перейдите в свойства проекта консольного приложения -> перейдите на вкладку Debug -> перейдите в раздел Enable Debuggers на правой панели -> отметьте Enable unmanaged code debugging установите флажок, как показано на снимке ниже.Коренная причина того, почему это произошло, до сих пор мне не известна.Единственное, что я заметил, было то, что было много обновлений Windows, которые были установлены на моем компьютере прошлой ночью, которые в основном состояли из обновлений для офиса и обновлений ОС (более десятка статей по КБ).1009 *

11 голосов
/ 25 июля 2014

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

netsh winsock reset

Источник: https://stackoverflow.com/a/20492181/1057791

8 голосов
/ 22 февраля 2017

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

7 голосов
/ 07 июня 2013

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

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

Tools menu ->Options -> Debugging -> General -> Uncheck this option "Suppress JIT optimization on module load"

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

5 голосов
/ 17 декабря 2014

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

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

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

Источник решения:

https://connect.microsoft.com/VisualStudio/feedback/details/819552/visual-studio-debugger-throws-accessviolationexception

5 голосов
/ 20 апреля 2012

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

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

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

3 голосов
/ 02 ноября 2010

Вы пытались отключить DEP (предотвращение выполнения данных) для своего приложения?

3 голосов
/ 27 мая 2014

Хорошо, это может быть довольно бесполезно и просто анекдотично, но ...

Это исключение постоянно генерировалось некоторыми библиотеками Twain32, которые мы использовали в моем проекте, но происходило только на моей машине.

Я перепробовал множество предлагаемых решений по всему интернету, но безрезультатно ... Пока я не отключил свой мобильный телефон (он был подключен через USB).

И это сработало.

Оказывается, библиотеки Twain32 пытались указать мой телефон как совместимое с Twain устройство, и что-то, что он сделал в этом процессе, вызвало это исключение.

Пойди разберись ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...