Ошибка попытка чтения или записи в защищенную память
Попытка чтения или записи в защищенную память
Как правило эта проблема возникает после нажатия кнопки фильтра для решения в Visual Studio 2005 Team System.
Решение
Сведения об исправлении
Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему. Это исправление может проходить дополнительное тестирование. Таким образом если вы не подвержены серьезно этой проблеме, рекомендуется дождаться следующего пакета обновления, содержащего это исправление.
Чтобы загрузить это исправление из коллекции кода MSDN, посетите следующий веб-узел корпорации Майкрософт:
Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Чтобы получить полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание, посетите следующий веб-сайт корпорации Майкрософт:
Предварительные условия
Для установки предварительные компоненты не требуются.
Необходимость перезагрузки
После установки исправления компьютер необходимо перезагрузить.
Сведения о замене исправлений
Это исправление не заменяет других исправлений.
Сведения о файлах
Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, откройте вкладку Часовой пояс элемента Дата и время в панели управления.
выходит ошибка после того как выполняется функция void poisk_cena(). Подскажите пожалуйста где ошибка.
Ошибка:
Необработанное исключение типа "System.AccessViolationException" произошло в kurs_9.exe
Дополнительные сведения: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
код:
System.AccessViolationException: Попытка чтения или записи в защищенную память - попытка 2
В предыдущей теме некто вообразил, что код зацикливается, поэтому приходится выкладывать более.
System.AccessViolationException: Попытка чтения или записи в защищенную память - попытка 3
Уже простите за некомпилируемый код, просто я переустановил Windows, и Visual Studio удалилась.
и почему у тебя каждый раз выделяется дин.массив, читается из файла, и удаляется? Думаю ошибка связана с тем, что ты и сам запутался в этих new/delete и где-то удалил невыделенную/освобождённую память.
Добавлено через 6 минут
короче, начни с простого. Прочитай из файла в массив эти данные. Поставь точку останова и проверь, правильно ли считался массив.
Запустил прогу.
О! И самый главный вопрос. Зачем ты заставляешь меня каждый раз вводить новый массив дисков? Он же в файле сохраняется после первого запуска. est не должно быть всегда равно false
Проблема из той же серии. Оно вводится пользователем при создании новой базы дисков. Вообще невозможно прочитать эту базу из файла. Только заставить юзера ввести новые кол-во дисков, их содержание, и только потом работать. А файл тут вообще просто рядом стоит и постоянно загружается/выгружается.
В том то и дело, что как читать файл он знает и при этом производит следующее.
ТРЕБУЕТ ввести массив с клавы вне зависимости от наличия файла.
Сохраняет его в файле, удаляет массив из памяти
При вызове функции удаления элемента
снова выделяет память под массив,
читает файл
выделяет память под второй массив,
копирует в него искомые данные
копирует данные из массива в файл
удаляет массив из памяти.
А значение m где?
Добавлено через 2 минуты
Знать может и знает, но динамический массив нулевого размера объявляет с настойчивостью, достойной лучшего применения.
alsav22 правильно спросил, где задан t?
t задается только в addvd. то есть если я всю программу пройду по меню от первого до последнего то может и отработает нормально, но если после запуска программы я сразу же выберу пункт 3, то в t будет в лучшем случае 0. или мусор, что скорее всего. от сюда и ошибка. добавь в poisk_cena проверку на корректность t. ну и выведи её перед циклом. увидишь какая ерунда там хранится. то же самое и m. тоже мусор там лежит.
Если ты его выберешь, тог программа просто скажет, что файла не существует, вне зависимости от его наличия.
Потому что переменная est тоже задается только в addvd.
Никакой ошибки.
Я обнаружил, что (по какой-то странной причине) производственный сервер, у которого были проблемы, имел 2.0 sp2, 3.0 sp2 и 3.5 sp1, в то время как другой производственный сервер и тестовый сервер имели 2.0 sp1.
мое приложение предназначено только для платформы 2.0, решено удалить все версии платформы с рабочего сервера и установить только 2.0 sp1. До сих пор мне не удалось воспроизвести эту проблему. Весьма интересный.
ПК развития: компактная 2.0 с пакетом обновления 2, компактная 3.5, 2.0 SP2 и 3.0 SP2 и 3.5 с пакетом обновления 1 Тестовый сервер: 2.0 с пакетом обновления 1 Производство сервер1: 2.0 с пакетом обновления 1 Производство server2: 2.0 пакет обновления SP2, 3.0 SP2, то 3.5 с пакетом обновления 1
Теперь, почему я не могу воспроизвести проблему на моем компьютере разработки, на котором есть 2.0 sp2, я не могу понять. Я слышал слухи, что это нарушение доступа может произойти на каком-то программном обеспечении, использующем удаленное взаимодействие, что делает мой, но нарушение доступа никогда не происходит, когда удаленное взаимодействие происходит на самом деле. Я в порядке с использованием только 2.0 sp1 на данный момент, но мне действительно интересно узнать, есть ли у кого-нибудь эта проблема, и если они нашли обходной путь для более новых версий frameowork.
вот несколько исключений и их трассировки стека:
У меня была та же проблема. 2.0 работал нормально. после установки до 3.5 sp1 приложение получает нарушение доступа.
netsh winsock reset
попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.
Я использовал OLEDB, и я переключился на SQL Client, и это решило мою проблему с этой ошибкой.
обычно я получаю " попытку чтения или записи защищенной памяти "при вызове метода" Show " на некоторых WinForms. Я проверил, и в этих формах нет ничего особенного. Я не знаю, почему это работает (может быть, кто-то может мне сказать), но обычно перемещение кода, который выполняется в событии "Load" формы, в событие "Shown" исправляет его для меня, и я никогда не вижу его снова.
проверьте, чтобы убедиться, что у вас нет нити в нити. Вот что вызвало эту ошибку для меня. См. эту ссылку:попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена
в моем случае это было исправлено, когда я настроил "включить 32-битные приложения" =True для пула приложений на сервере IIS.
в моем случае шрифты, используемые в одной из общих библиотек, не были установлены в системе.
проблема может быть из - за смешанных платформ сборки DLL в проекте. Я. e вы создаете свой проект для любого процессора, но имеете некоторые библиотеки DLL в проекте, уже построенном для платформы x86. Это вызовет случайные сбои из-за различного сопоставления памяти 32-битной и 64-битной архитектуры. Если все библиотеки DLL построены для одной платформы, проблема может быть решена. Для безопасности попробуйте bulinding для архитектуры 32bit x86, потому что она наиболее совместима.
в моем случае у меня были проблемы с "переменными среды" при добавлении ссылки на мою COM DLL.
когда я добавил ссылку на мой проект, я ищу P:\Core путь, тогда как я добавил c:\core путь в прошлое в среду пути varaible.
Итак, мой код сначала пытался ошибиться. Я удалил это и не зарегистрировал ссылку DLL и повторно зарегистрировал мою ссылку DLL с помощью (regsvr32). Надеюсь, это поможет.
Привет, есть две возможные причины.
у нас есть неуправляемый код, и мы вызываем его из управляемого кода. это предотвращает запуск этого кода. попробуйте запустить эти команды и перезагрузите компьютер
Я надеюсь, что кто-то может просветить меня, что могло быть причиной этой ошибки:
попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.
Я не могу опубликовать код, потому что эта ошибка, похоже, брошена в любой случайной области приложения. Приложение будет работать в любом месте от 12-48 часов до возникновения ошибки. Иногда он останавливается в кажущемся случайным месте и бросает вышеуказанная ошибка, в других случаях все приложение останавливается, и я получаю экран с ошибкой, которая говорит что-то вроде "была фатальная ошибка. Это может быть ошибка в CLR или. "что-то о PInvoke или другой соответствующей информации. Когда это происходит, все потоки отображаются завершенными, и отладочная информация недоступна.
в двух словах это так:
Я попытался отключить оптимизацию компилятора и несколько исправлений microsoft. Ничто, кажется, не заставляет эту проблему уйти. Было бы полезно, если кто-нибудь знает какие-либо возможные причины, или какой-то способ определить, что вызывает проблему.
наконец-то отследил это с помощью WinDBG и SOS. Нарушение доступа было вызвано какой-то неизвестной DLL. Оказывается, часть программного обеспечения под названием "NVIDIA Network Manager" вызывала проблемы. Я читал бесчисленное количество раз, как эта проблема может быть вызвана брандмауэрами или антивирусами, ни один из которых я не использую, поэтому я отклонил эту идею. Кроме того, я был в предположении, что это не было окружающей средой, потому что это происходит на более чем 1 сервере с использованием другого оборудования. Получается все машины, на которых я тестировал это, работали под управлением "Nvidia Network Manager". Я считаю, что он устанавливается с остальными драйверами материнской платы.
надеюсь, это поможет кому-то, так как эта проблема мучила мое приложение в течение очень долгого времени.
попробуйте выполнить эту команду
Я также столкнулся с этой проблемой с Visual Studio 2010. Более интересно, что у меня было несколько проектов в моем решении (консольное приложение, приложение WPF, приложение Windows Forms), но он терпел неудачу только тогда, когда я устанавливал проект, который был типа "консольное приложение" как проект запуска (даже для тех, у которых буквально не было кода или каких-либо дополнительных сборок, упомянутых кроме стандартных, которые поставляются с самим шаблоном проекта).
эта ошибка не должна возникать в управляемом коде. Это может решить проблему:
перейдите в отладчик Visual Studio, чтобы обойти это исключение:
надеюсь, это поможет.
проблема может быть из - за смешанных платформ сборки DLL в проекте. Я. e вы создаете свой проект для любого процессора, но имеете некоторые библиотеки DLL в проекте, уже построенном для платформы x86. Это вызовет случайные сбои из-за различного сопоставления памяти 32-битной и 64-битной архитектуры. Если все библиотеки DLL построены для одной платформы, проблема может быть решена.
У меня была эта проблема недавно, когда я изменил сервер разработки для проекта. Я получал эту ошибку в строке кода, где я объявил новую переменную OracleConnection.
после многих попыток, включая установку исправлений, я попытался изменить ссылки Oracle.DataAccess и система.Данные.OracleClient в проекте, и это сработало!
когда проект перемещается на новую машину, я предлагаю вам обновить все ссылки, добавленные в этот проект.
Я столкнулся и нашел решение этого исключения сегодня. Это произошло, когда я пытался отладить модульный тест (NUnit), который вызвал виртуальный метод в абстрактном классе.
не удалось подключиться к серверу MYSERVER. (Microsoft.От SQLServer.ConnectionInfo)
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена. (Система.Данные)
Я получал эту ошибку при использовании entity framework для запуска любого запроса, например, любой строки:
Я думал, что это было проблема EF, но затем я попытался использовать редактор Transact Sql в VS2012 для подключения к базе данных, чтобы я мог запросить его, и я получаю ту же ошибку при попытке подключения.
но у меня есть другие, не Microsoft querying tools, которые могут подключаться к базе данных и запрашивать ее, не вызывая ошибки. Поэтому я думаю, что проблема где-то в драйверах Microsoft, или системы.Данные.SqlClient, но я не могу понять, в чем проблема.
обновление: я попытался подключение в LinqPad к тому же серверу, и когда я пытаюсь подключиться, он просто зависает.
обновление: трассировка стека довольно длинная и выглядит так:
. строки в моем приложении, которые пытаются выполнить запрос EF.
netsh winsock reset
и затем перезапустите.
Per этой, " в любом случае, решение состояло в том, чтобы включить оптимизацию JIT. Другими словами, в Visual Studio 2008 выберите "инструменты", а затем"Параметры". Выберите "отладка" и "общие"и найдите строку с надписью" подавить оптимизацию JIT при загрузке модуля". Этот вид гарантирует, что отладчик и скомпилированный JIT-код не выходят из синхронизации, потому что JIT-компилятор является таким супер-пупер-оптимизатором вашего кода. Это сработало."
проверю. Это не работает, попробуйте подключиться к базе данных с помощью SQL Server Management Studio. Если вы можете, ошибка, вероятно, связана с Visual Studio.
У меня такая же проблема с моей SQL Server 2014 Express Edition при подключении к удаленному sql server.
попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена. (Система.Данные)
Читайте также: