Довольно часто приходится сталкиваться с ситуацией, когда выводится сообщение типа "Инструкция по адресу “хххххх” обратилась к памяти по адресу “хххххх” (при этом в качестве адреса могут указываться разные цифро-буквенные значения). Память не может быть "read". "OK" - завершение приложения"
Хотя в этом сообщении и пишется что-то про память, но сама память (имеются ввиду модули ОЗУ) тут совершенно ни при чем... Такие ошибки - практически всегда результат плохого взаимодействия программных модулей между собой (часто это могут быть какие-то драйверы или программы), в то время как железные глюки, как правило, кончаются жестким зависанием системы или синим экраном, т.е. указанная ошибка имеет отношение к софту, а не к дефектам памяти.
Причина №1: Менеджер виртуальной памяти Windows обнаруживает ошибки, связанные с попыткой доступа к страницам, в атрибутах доступа к которым обнаруживается несоответствие текущих прав доступа страницы кода выполняемой в данный момент, и страницы данных/кода запрашиваемых инструкцией чтения/записи. Поскольку такая ошибка не фатальна для ОС, то сообщении выдается через GDI, причем не обязательно в той программе, которая вызывает ошибку, а, например, в системной библиотеке... Подобная проблема обычно связана с функцией "Data Execution Prevention" (DEP), которая реализованна в пакете обновления SP2 для Windows XP, и предназначена для защиты компьютера от вирусов и других вредоносных программ путем наложения определенных ограничений на работу выполняемых на компьютере программ, поэтому такие ошибки, как правило, чаще встречается именно при наличии SP2. Отсюда следует, что при отказе от использования SP2 и возврате к SP1 такую ошибку можно устранить, но это, конечно, не метод решения проблемы.
Возможное решение:
Вариант 1: Мой компьютер > Свойства > Дополнительно > в рамке Быстродействие кнопка Параметры > Предотвращение выполнения данных > или поставить галку "Включить DEP только для основных программ и служб Windows" или же при установленной галке "Включить DEP для всех программ и служб, кроме выбранных ниже", затем нажать кнопку "Добавить" и указать путь к программе, вызывающей проблему.
Вариант 2: 1) Открываем в Блокноте файл boot.ini (он находится в корне системного диска и является системным, а потому, чтобы он был виден в Проводнике, должна быть снята опция "Скрывать защищенные системные файлы"); 2) Сохраняем на всякий случай резервную копию этого файла; 3) Меняем в этом файле фрагмент "/NoExecute=OptOut" на "/noexecute=AlwaysOff" 4) Сохраняем файл; 5) Перегружаемся.
Более подробно - здесь. Причина №2 - конфликт программного обеспечения. Одна из программ мешает правильно функционировать другой программе и появляется эта ошибка. Чёткого списка конфликтного софта не существует. Тем не менее, в Интернете засветились: Пакет Norton Internet Security 2007, Kaspersky Internet Security 2009, Outpost Firewall, K-Lite Mega Codec Pack и антивирус Dr.Web, а также драйвера от принтеров фирмы Hewlett-Packard. Сюда же можно отнести и "захламленную" систему. Если Windows простояла полгода или больше, то вполне может появиться эта ошибка, особенно если ОС активно используется, т.е. часто устанавливаются новые программы, игры и драйвера.
Полезная информация: если у вас ТВ-тюнер фирмы Beholder, то не устанавливайте драйвера на него через install.exe. Укажите путь к inf-файлу драйвера вручную, через Мастер установки оборудования (Диспетчер устройств - правой кнопкой на устройство - Обновить драйвер...).
Причина №3 - работа отладчика Dr. Watson. Для того, чтобы отключить его, откройте реестр (Пуск-Выполнить: regedit) и раскройте ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion. В ней одним из самых первых разделов будет AeDebug. Щёлкните по нему правой кнопкой и выберите Удалить. Но учтите, что данное действие не претендует на решение ошибки чтения памяти, оно может лишь убрать само сообщение об ошибке.
Причина №4 - русские символы в пути к файлу. Даже в наши времена необходимо стараться устанавливать игры\программы по нормальным путям, стараясь избегать русских букв в названии, а также слишком длинных путей. Используйте как можно более короткие и понятные пути (например E:\Programs\Fraps).
Причина №5 - проблема обращения к системной библиотеке. Эта ошибка может быть связана с проблемой обращения к системной библиотеке ole32.dll, которая могла быть испорчена или разрегистрирована (например, при установке\удалении других программ). Чтобы пофиксить эту возможную причину, сделайте Пуск-Выполнить: regsvr32 %SystemRoot%\system32\ole32.dll
Причина №6 - попытка отправить отчёт об ошибке. Весьма оригинальный совет, в котором было сказано, что подобной ошибки (Память не может быть read\written) можно избежать, если отключить в WinXP отправку любых отчётов об ошибках в Microsoft. В Свойствах Моего компьютера надо выбрать вверху Дополнительно и нажать кнопку "Отчет об ошибках".
Причина №7 - проблемы с многоядерными процессорами. Если у вас многоядерный процессор (то есть 2 ядра или больше), то попробуйте скачать маленькую программку CPU-Control и выставить в ней режим "CPU 1". Количество ядер можно посмотреть в Диспетчере устройств (ветка "Процессоры"; 1 процессор = 1 ядро, 2 процессора = 2 ядра и т.д.). Если CPU-Control вам не помог, то выставите в нем значение Auto, закройте его и удалите. Примечание: на системах с одноядерным процессором эта программа бесполезна.
Причина №8 - проблемы с файлом подкачки. Рекомендуется проконтролировать обращение системы к этому файлу. Для этого необходимо в Свойствах Моего компьютера выбрать вверху Дополнительно и нажать кнопку "Параметры" (самая верхняя). Откроется новое окно. В нём также надо выбрать вверху Дополнительно и нажать в нижней части кнопку "Изменить". Выделите диск, на котором хотите расположить файл подкачки (желательно, чтобы он был поменьше фрагментирован). Поставьте точку напротив пункта Особый размер и введите желаемый размер. Минимальный и максимальный объём желательно выставлять одинаковым. Перед выходом необходимо нажать кнопку "Задать". При уменьшении\отключении файла подкачки потребуется перезагрузка. При увеличении\включении файла подкачки перезагрузка обычно не нужна. Ниже будут приведены рекомендуемые значения для объёма файла подкачки в зависимости от объёма RAM самого компьютера: 512Мб RAM = 1536Мб для файла подкачки 1024Мб RAM = 1024Мб для файла подкачки 1536Мб RAM = 512Мб для файла подкачки 2048Мб RAM = 256Мб для файла подкачки или вообще 0Мб
Причина №9 - несовместимость оперативной памяти. Маловероятно, но подобная ошибка может быть вызвана в том случае, если в паре работают два модуля оперативной памяти от разных производителей. Соответственно, проверить это просто: просто вытащите один из модулей.
Причина №10 - плохой блок питания. Ошибка чтения памяти может быть вызвана и некачественным\старым БП. Конечно, это очень уж маловероятно, но наиболее идеальным вариантом будет подключение компьютера к заведомо нормальному блоку питания. Если же у вас нет возможности одолжить у кого-нибудь БП, то просто отключите различную мелочь, т.е. CD\DVD-привод, карты расширения, установленные в PCI-слотах, принтер и т.д.
Причина №11 - некорректно установленные тайминги памяти Один из наиболее "тяжёлых" случаев*. Встречается редко и наукой не подтверждён. Кто знает о таймингах - поймут сами, что делать. Кто не знает - [spoiler]значит это не ваш случай.
Причина №12 - перегрев памяти. Безусловно, модули RAM нагреваются во время работы, но дополнительное охлаждение требуется лишь конкретным планкам памяти, например, которые разогнаны самим производителем и потому нуждаются в хорошем охлаждении. Но обычная память (которая стоит у 95% пользователей) нормально работает даже в плохо вентилируемых корпусах. Хотя в данном случае всё это можно проверить очень легко - достаточно просто открыть корпус.