Содержание
- Ошибка Access violation at address … in module
- Причины появления ошибки Access violation at address … in module
- Как избавиться от ошибки обращения к памяти
- Проверка запуска оболочки Windows
- Чистка системного реестра Windows
- Другие методы решения ошибки «Access violation at address …»
- Восстановление или переустановка системы
- Ошибка EXCEPTION ACCESS VIOLATION — как исправить
- Exception Access Violation как результат работы антивирусного ПО
- Дополнительные способы исправить ошибку
- Видео
- Ошибка Access violation at address и способы решения
- Причины возникновения и разновидности
- Способы решение ошибки
Ошибка Access violation at address … in module
Каждый, кто знаком с ОС Windows знает, что невозможно пользоваться компьютером, не столкнувшись с ошибками и проблемами. Многие из них можно решить обычной перезагрузкой системы. Но встречаются и такие, при которых невозможно продолжить работу. Одной из таких ошибок является «Access violation at address … in module». Читайте далее, как её исправить.
Причины появления ошибки Access violation at address … in module
Данная ошибка может возникать, когда процесс обращается не к тому типу памяти или она не предназначена для использования этого приложения. Она может возникать при запуске игр, использовании любых программ или медиа проигрывателей. Этому может способствовать как сбой в самой системе и архитектуре файлов на диске, так и при влиянии вирусного программного обеспечения. Часто еще этот сбой возникает, когда пользователь пытается открыть файл или обратиться к нему, но по адресу его нет.
Ошибку могут спровоцировать программы, которые были разработаны неумелыми программистами. Чтобы не сталкиваться с этой проблемой, нужно скачивать программное обеспечение только с официальных сайтов.
Как избавиться от ошибки обращения к памяти
Ошибка появляется при попытке выключить компьютер, перезагрузить его или поменять свой профиль. Но часто так и не удается это сделать из-за системного сообщения. Приходится либо выключить устройство из розетки, либо выключать его долгим нажатием кнопки питания Power . Перед тем, как устранять ошибку Access violation at address … in module, проверьте хранилище вирусов вашего антивирусного программного обеспечения. Возможно некоторые файлы, к которым вы пытались обратиться, были помещены сюда. Такие данные для системы будут уже не доступны.
- Чтобы это сделать, найдите значок на панели задач (трее) в виде стрелочки, нажмите её и появятся скрыты значки.
- Здесь выберите значок антивируса ПКМ.
- В контекстном меню обычно находится пункт «Карантин».
Выберите его и проверьте содержимое. Если найдете там файлы программ, которым вы доверяете — удалите их из карантина. Если ошибка Access violation at address продолжается, необходимо переустановить данную программу и внести в антивирусе в список доверенных.
После этого попробуйте перезапустить компьютер и войти в ОС через последнюю удачную конфигурацию.
- Для этого при появления начального экрана нажмите клавишу F8 и не отпускайте до тех пор, пока не появится окно с несколькими способами запуска.
- Выберите «Запуск последней удачной конфигурации».
- В этом случае будет использована система с конфигурацией драйверов и реестра, которые работали до этого стабильно.
Выберите последнюю удачную конфигурацию в Windows
Проверка запуска оболочки Windows
Следующим шагом в исправлении ошибки Access violation at address … in module будет проверка запуска оболочки операционной системы.
- Откройте окно ввода команд — WIN+R.
- Введите следующую команду «Regedit» и подтвердите, нажав Enter.
- Откроются ветки, здесь выберите HKEY_LOCAL_MACHINE.
- Далее найдите ниже SOFTWARE.
- Здесь отыщите ветку Microsoft, ниже выберите Windows NT и CurrentVersion.
- И наконец выберите Winlogon.
Когда вы откроете последнюю ветку в правой части появится окно со списком ключей и параметров, найдите здесь Shell. Его необходимо открыть как обычную папку, дважды нажав мышью. В исправной системе здесь должно быть значение Explorer.exe. Если у вас стоит иное — исправьте его и сохраните изменение. Точно так же нужно проверить ключ Userinit. Здесь по умолчанию установлено C:windowssystem32userinit.exe. Если здесь указано что-то другое — исправьте. Далее выйдите из редактора и закройте все окна. Перезагрузите компьютер и проверьте, появляется ли ошибка.
Чистка системного реестра Windows
В некоторых случаях при ошибке Ошибка Access violation at address in module помогает очистка системного реестра.
- Для этого вполне сгодится программ CCleaner, которую можно скачать по ссылке https://www.ccleaner.com/ru-ru.
- Загрузите и установите её.
- Откройте и выберите слева «Реестр».
- Нужно активировать внизу «Анализ», далее появится кнопка «Очистить».
Иногда ошибка появляется при работе в интернете с браузера. В этом случае нужно открыть меню, найти здесь расширения и плагины, и удалить все ненужные. Если установлен плагин AddBlock, то он также может способствовать проблемам с работой некоторых приложений. Его нужно удалить. После этого нужно перезагрузить компьютер.
Другие методы решения ошибки «Access violation at address …»
Далее нужно попытаться восстановить файлы, которые возможно были удалены самим пользователем, антивирусами или вирусам. Для этого понадобится дистрибутив с текущей операционной системой Windows. Вставьте его в привод и следуйте дальнейшей инструкции:
- выберите внизу рабочего стола «Пуск» и введите в поиске «Командная строка»;
- в результатах выберите её ПКМ и нажмите «От имени администратора»;
- в черном окне введите «sfc /scannow» без кавычек.
Будет произведена проверка файлов на жестком диске. Эта команда сканирует файловую систему жесткого диска и, если находит сбои в системных файлах автоматически исправляет их. Компьютер будет перегружен в процессе. Если этот способ снова не помог вам устранить проблему «Access violation at address … in module», попытайтесь вернуть рабочую систему при помощи точек сохранения.
- Снова откройте меню «Пуск», выберите поисковую строку и введите «Восстановление».
- В результатах найдите «Восстановление системы» — выберите его.
- Выберите пункт, который запустит восстановление.
В этом случае система также будет перезагружена и возвращена к состоянию сохраненной точки. Проверьте, возникает ли сейчас ошибка. В тексте данной ошибки часто указан модуль и программа, с которой возникают проблемы. Найдите эту программу на своем компьютере и удалите её, а затем заново установите. Это можно сделать в панели управления.
- Выберите кнопку «Пуск», затем найдите справа раздел «Панель управления».
- В следующем окне отыщите «Восстановление или удаление программ».
- В списке найдите проблемное ПО и выберите кнопку «Удалить» на панели инструментов или в самом блоке (в зависимости от версии ОС).
Восстановление или переустановка системы
Если ни один из методов вам не помог решить эту ошибку, попробуйте сделать восстановление с участием диска Windows.
- Для этого вставьте в привод диск и перезагрузите компьютер.
- Войдите в настройки подсистемы BIOS и выберите загрузку с дисковода.
- Перезагрузите компьютер и активируйте загрузку с оптического диска.
- После того, как будут установлены временные файлы, вы увидите окно, где предлагается переустановить систему с несколькими вариантами. Выберите «Восстановление системы».
- Далее найдите необходимое восстановление и нажмите «Готово».
Когда будет выполнено восстановление, проверьте наличие ошибки на компьютере. В том случае, если она снова возникает, придется переустановить Windows. Это можно сделать, не затрагивая файловый раздел жесткого диска. Это значит, что вы можете переустановить только систему на диске C:, а другие диски, где обычно хранятся файлы пользователя не трогать. После переустановки системы вы точно избавитесь от ошибки Access violation at address … in module.
Источник
Ошибка EXCEPTION ACCESS VIOLATION — как исправить
При запуске игры или программы, а иногда и во время работы с ними вы можете столкнуться с ошибкой Exception Access Violation, в заголовке окна может быть информация об Unhandled Exception, Unexpected Error или Fatal Error, в тексте — коды наподобие 0xc0000005 или указание на DLL. Ошибка типична для Windows 10, предыдущих версий системы и, с большой вероятностью, останется и в Windows 11.
В этой инструкции о возможных способах исправить ошибку Exception Access Violation, которая, по сути, обычно сводится к невозможности какого-либо модуля программы или игры получить доступ к нужной области оперативной памяти.
Exception Access Violation как результат работы антивирусного ПО
Среди наиболее часто встречающихся причин ошибки у русскоязычного пользователя, особенно при использовании нелицензионных игр или программ — антивирус: встроенный Windows Defender или какой-либо сторонний.
Возможные действия исправить Exception Access Violation для этого случая:
- Проверьте, сохраняется ли ошибка, если временно отключить ваш антивирус.
- Добавьте папку с программой или игрой в исключения антивируса. В случае использования Защитника Windows сделать это можно, открыв «Безопасность Windows» — «Защита от вирусов и угроз» — «Управление настройками» и добавив нужную папку в разделе «Исключения».
Функция предотвращения выполнения данных в памяти также может привести к рассматриваемой ошибке для некоторых программ, попробуйте её отключить. Для этого:
- Нажмите клавиши Win+R на клавиатуре, введите sysdm.cpl и нажмите Enter.
- На вкладке «Дополнительно» в разделе «Быстродействие» нажмите кнопку «Параметры».
- Откройте вкладку «Предотвращение выполнения данных», выберите пункт «Включить DEP для всех программ и служб, кроме выбранных ниже» и добавьте в список исполняемый файл программы или игры, которая вызывает ошибку Exception Access Violation. Примените настройки.
Дополнительные способы исправить ошибку
Два указанных выше метода чаще всего возвращают работоспособность и являются решением проблемы, но не всегда. Дополнительно вы можете попробовать следующие способы:
- Для относительно старого ПО — попробовать запустить программу или игру в режиме совместимости с предыдущей версией ОС, подробнее: Режим совместимости Windows 10.
- Если ошибка стала появляться в программе, которая до этого работала исправно на этом же компьютере, попробуйте использовать точки восстановления системы на дату, когда проблема ещё не наблюдалась.
- В случае, если вы столкнулись с проблемой после переустановки Windows на компьютере или ноутбуке, вручную установите все оригинальные драйверы устройств, включая драйверы чипсета. Вручную — это не с помощью «Обновить драйвер» в диспетчере устройств, а загрузив драйверы с официального сайта производителя материнской платы или ноутбука.
- Попробуйте запустить программу или игру от имени администратора.
- Проверьте оперативную память на ошибки, этот фактор также может оказаться причиной ошибке Exception Access Violation.
- Иногда ошибка возникает после ручного добавления библиотек DLL в систему в папки C:WindowsSysWOW64 и C:WindowsSystem32. Иногда это оказываются не рабочие DLL, иногда — разрядность библиотеки не соответствует расположению.
- Для программистов на JAVA: сообщают, что ошибка может возникнуть, когда x64 системах в PATH указание на SysWOW64 идёт перед System32.
Также, если речь идёт о загруженной из Интернета (с неофициального сайта) программе, можно попробовать удалить её, а затем скачать из другого источника.
Видео
Буду благодарен, если в комментариях вы сможете поделиться, какой из способов сработал в вашем случае.
Источник
Ошибка Access violation at address и способы решения
Основная проблема с которой сталкиваются пользователи ПК — является «синий экран смерти». Его появление может свидетельствовать о проблемах с исполняемыми системными файлами которые подверглись изменениям или перезаписыванию. Решение возникших сложностей не всегда можно назвать простыми. Одни решаются буквально за пару минут, а у других следует определить корень. Исходя из информации которую нам предоставляет Windows, мы следует процедуре восстановления повреждённых объектов файловой системы. Некоторые ради экономии времени или по незнанию начинают полную переустановку, но мы с Вами попытаемся решить ошибку без данной процедуры.
Причины возникновения и разновидности
Нам хотелось бы выделить основные текстовые и кодовые представления ошибки встречаемые пользователями. В большинстве случаев помогает полная переустановка системы. Данная процедура решит большинство проблем, при перезаписи исполняемых файлов. Замена битых файлов совершенно новыми — один из вариантов решения.
Основной причиной возникновения можно назвать нарушение целостности системы. При рассмотрении ошибки «Access violation» мы взяли за исходные материалы сами исполняемые процессы. При детальном рассмотрении можно обнаружить, что процесс обращается к .dll файлам у которых затёрты заголовоки. В результате мы видим на экране «Access violation at address $ (где символ $ — код процесса) in module«. Определение причины по коду можно сделать из панели администрирования Windows.
Дополнительной серьезной причиной могут служить битые секторы в которые при дефрагментации были записаны корневые файлы. Обычно это драйвера или .dll-ки папки Виндовс.
Способы решение ошибки
Нам потребуется заняться восстановлением целостности системы. Хорошо поможет специальная команда встроенная в операционную систему. Для ее вызова, следуем инструкции:
- Нажимаем WIN+R для открытия диалогового окна ввода команды.
- Пишем команду cmd и нажимаем ОК.
- На экране отобразится терминал работы с системой:
- Вводим команду «sfc/scannow«.
- Нам предложат перезагрузить систему для исправления ошибок.
- Перезапускаемся и ничего не нажимаем. Начнется автоматическая проверка целостности файлов.
- После запуска, вновь заходим в терминал и вводим команду «chkdsk C: /f /r«. Она проверит жесткие диски на битые секторы и заблокирует их, предварительно перенеся файлы в безопасное место.
- Ошибка Access violation at address должна исчезнуть.
Второй способ заключается в стандартных действиях которые каждый пользователь должен выполнять ежедневно.
- Займитесь проверкой и обновлением системы до последней версии.
- Обновите драйвера видеокарт, если Access violation появляется при запуске игры.
- Исполняемые файлы VC++ должны быть в актуальном состоянии. Скачать можно с официального сайта Microsoft.
- Произведите дефрагментацию диска С. Это поможет перенести данные в рабочие секторы жесткого диска (если у вас SSD, то пропускаем шаг).
Источник
При запуске игры или программы, а иногда и во время работы с ними вы можете столкнуться с ошибкой Exception Access Violation, в заголовке окна может быть информация об Unhandled Exception, Unexpected Error или Fatal Error, в тексте — коды наподобие 0xc0000005 или указание на DLL. Ошибка типична для Windows 10, предыдущих версий системы и, с большой вероятностью, останется и в Windows 11.
В этой инструкции о возможных способах исправить ошибку Exception Access Violation, которая, по сути, обычно сводится к невозможности какого-либо модуля программы или игры получить доступ к нужной области оперативной памяти.
- Антивирусное ПО и Exception Access Violation
- DEP (Предотвращение выполнения данных)
- Дополнительные методы исправить ошибку
- Видео инструкция
Exception Access Violation как результат работы антивирусного ПО
Среди наиболее часто встречающихся причин ошибки у русскоязычного пользователя, особенно при использовании нелицензионных игр или программ — антивирус: встроенный Windows Defender или какой-либо сторонний.
Возможные действия исправить Exception Access Violation для этого случая:
- Проверьте, сохраняется ли ошибка, если временно отключить ваш антивирус.
- Добавьте папку с программой или игрой в исключения антивируса. В случае использования Защитника Windows сделать это можно, открыв «Безопасность Windows» — «Защита от вирусов и угроз» — «Управление настройками» и добавив нужную папку в разделе «Исключения».
DEP
Функция предотвращения выполнения данных в памяти также может привести к рассматриваемой ошибке для некоторых программ, попробуйте её отключить. Для этого:
- Нажмите клавиши Win+R на клавиатуре, введите sysdm.cpl и нажмите Enter.
- На вкладке «Дополнительно» в разделе «Быстродействие» нажмите кнопку «Параметры».
- Откройте вкладку «Предотвращение выполнения данных», выберите пункт «Включить DEP для всех программ и служб, кроме выбранных ниже» и добавьте в список исполняемый файл программы или игры, которая вызывает ошибку Exception Access Violation. Примените настройки.
Дополнительные способы исправить ошибку
Два указанных выше метода чаще всего возвращают работоспособность и являются решением проблемы, но не всегда. Дополнительно вы можете попробовать следующие способы:
- Для относительно старого ПО — попробовать запустить программу или игру в режиме совместимости с предыдущей версией ОС, подробнее: Режим совместимости Windows 10.
- Если ошибка стала появляться в программе, которая до этого работала исправно на этом же компьютере, попробуйте использовать точки восстановления системы на дату, когда проблема ещё не наблюдалась.
- В случае, если вы столкнулись с проблемой после переустановки Windows на компьютере или ноутбуке, вручную установите все оригинальные драйверы устройств, включая драйверы чипсета. Вручную — это не с помощью «Обновить драйвер» в диспетчере устройств, а загрузив драйверы с официального сайта производителя материнской платы или ноутбука.
- Попробуйте запустить программу или игру от имени администратора.
- Проверьте оперативную память на ошибки, этот фактор также может оказаться причиной ошибке Exception Access Violation.
- Иногда ошибка возникает после ручного добавления библиотек DLL в систему в папки C:WindowsSysWOW64 и C:WindowsSystem32. Иногда это оказываются не рабочие DLL, иногда — разрядность библиотеки не соответствует расположению.
- Для программистов на JAVA: сообщают, что ошибка может возникнуть, когда x64 системах в PATH указание на SysWOW64 идёт перед System32.
Также, если речь идёт о загруженной из Интернета (с неофициального сайта) программе, можно попробовать удалить её, а затем скачать из другого источника.
Видео
Буду благодарен, если в комментариях вы сможете поделиться, какой из способов сработал в вашем случае.
Иногда при запуске игры или программы возникает ошибка Access violation at address, которая сообщает о проблеме на стороне прав доступа. Но это вовсе не означает, что действуют какие-то ограничения. Причем неважно в каком виде она появилась:
- read of address 00000000
- in module
- write of address
- the bat
- Или каком-то другом. Это все одно и то же.
В переводе на русский означает «Нарушение доступа по адресу». Но что это за проблема и как ее исправить? Давайте разбираться.
Содержание статьи
- Диагностика памяти
- Чистый запуск
- Удаление программ
- Сканирование на предмет ошибок
- Проверка системных компонентов
- Редактирование DEP
- Выключение UAC
- Другие способы решения
- Комментарии пользователей
Диагностика памяти
Первый шаг — запустить диагностику памяти. Есть два способа, как это сделать:
- Универсальный, используя утилиту Memtest.
- Для пользователей Windows 10 и 8. Разберем его подробнее.
В строку поиска вводим слово «памяти» и запускаем средство.
Выбираем первый пункт с пометкой «рекомендуется». Система перезагрузится и начнется сканирование.
Дождитесь завершения процедуры и посмотрите на графу «Состояние». Ошибок быть не должно. При их наличии выньте ОЗУ и протрите контакты ластиком, затем установите обратно. Если это не поможет, то замените старые планки новыми.
Чистый запуск
Предлагаю запустить компьютер в чистом режиме, чтобы узнать, не вызывает ли проблему одна из установленных программ.
Для этого:
- Введите msconfig в строке «Выполнить», комбинация «WIN + R».
- Переместитесь в «Службы» и скройте все от «Майкрософт». Отключите оставшиеся.
- Проделайте то же самое в разделе «Автозагрузка».
- Перезагрузите компьютер.
Если это устранило неполадку, то снова активируйте программы и отключайте их по одной, чтобы выявить неисправную. Часто сбой вызывают антивирусы, блокируя в целях безопасности некоторые приложения.
Удаление программ
Как говорил ранее, ошибку Access violation at address могут вызывать некоторые приложения. Чаще всего это fl studio, Artmoney, txdworkshop. Поэтому удалите лишние через деинсталлятор «Your Uninstaller» или любой другой. Желательно это делать из безопасного режима.
Если в безопасный режим войти не удается, то откройте диспетчер задач «CTRL + SHIFT + ESC», во вкладке «Процессы» найдите нужную утилиту и правым щелчком мыши откройте ее расположение. После этого удалите процесс.
Теперь, находясь в этой папке удалите содержимое.
Если приложение нужно, то попробуйте переустановить его. Предварительно очистив Windows утилитой «Ccleaner».
Сканирование на предмет ошибок
Некоторые системные файлы могут отсутствовать или быть повреждены. Желательно проверить это и исправить. Делается в автоматическом режиме с помощью команд в командной строке.
DISM /Online /Cleanup-Image /RestoreHealth – нужен доступ в интернет.
sfc /scannow
Напишите их и нажмите после каждой «Enter». По завершении перезапустите ПК.
Проверка системных компонентов
Стоит убедиться, что в реестре указаны компоненты Windows, отвечающие за правильную ее работу.
Будьте осторожны при редактировании реестра, неправильные действия могут нарушить работу ОС. Действуйте четко по инструкции.
Для этого:
- Войдите в редактор через «WIN + R» — regedit.
- Перейдите по пути HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon и найдите два параметра: Userinit и Shell. Дважды щелкните по каждому из них. Убедитесь, что в графе «Значение» указаны правильные пути. При необходимости измените их.
Shell (должен ссылаться на исполняемый файл) – explorer.exe
Userinit (должен ссылаться на исполняемый файл) — C:Windowssystem32userinit.exe
По окончании перезапустите компьютер.
Редактирование DEP
Возможно, ошибку Access violation at address (in module, read of address) вызывает компонент «DEP», блокирующий в целях безопасности некоторые программы. В качестве решения предлагаю внести приложение в список исключений.
Как это сделать:
- Откройте «Свойства» ярлыка «Компьютер».
- Перейдите в «Дополнительные параметры».
- Во разделе «Дополнительно» щелкните по «Параметры» быстродействия.
- Зайдите в «Предотвращение выполнения» и активируйте последний параметр с пометкой «кроме выбранных ниже». Укажите нужное приложение через кнопку «Добавить».
Выключение UAC
Большинство приложений разработанных на базе Java не работают из-за включенного контроля учетных записей, сокращенно «UAC». Давайте выключим его.
- Откройте классическую «Панель управления».
- Войдите в раздел «Учетный записи».
- Щелкните по изменению контроля.
- Передвиньте ползунок вниз до появления пометки «Никогда не уведомлять».
Другие способы решения
Если ничего не помогло, то предпримите следующие действия.
Помните, что Вы можете рассчитывать на мою помощь. Для этого напишите мне в комментариях.
Критическая ошибка, она же более известна как «синий экран смерти», всегда влечёт за собой определённые последствия, так как её возникновение свидетельствует о том, что в работе операционной системы возникли серьёзные неполадки. Каждый пользователь, являющийся оператором компьютера, так или иначе, но сталкивался с проявлением подобной проблемы и знает, что далеко не всегда её решение лежит на «поверхности». Порой для исправления возникшей ситуации приходится прибегать к крайним мерам – это фактическая переустановка операционной системы Windows. Стоит ли применять данный способ в решении рассматриваемой в настоящей статье ошибки, в чём заключаются причины её возникновения. Обо всём об этом вы сможете прочитать ниже.
Исправление ошибки Access violation.
Причины и решения
Такой универсальный вариант (переустановка ОС) уже давно является наиболее рекомендуемым на различных IT-форумах, а также некоторыми «специалистами» воспринимается как «панацея» от любых проблем, что, конечно же, не отвечает действительности. Да, справедливости ради стоит отметить, что полная чистая переустановка Windows практически гарантированно решит имеющиеся программные проблемы, но ни в коем разе не аппаратные. Поэтому не стоит спешить «сносить» операционную систему, для начала следует определить причинно-следственную связь и только после этого принимать подобные кардинальные решения. Итак, рассматриваемая ошибка «Access violation» сигнализирует о том, что какой-либо процесс при обращении к нужному ему типу памяти встречается с трудностями. Например, при запуске игрового программного обеспечения процесс пытается обратиться не к свойственному ему типу памяти, вызывая при этом упомянутую выше ошибку, которая сопровождается текстовым сообщением в виде «Access violation at address № in module «…dll. Write of address…».
Причин возникновения подобной ситуации может быть очень много, что серьёзно усложняет определение причинно-следственной связи, поэтому и применяемые методы носят комплексный характер, а именно:
- Проведите полную проверку операционной системы на наличие вирусной активности. Не прибегайте исключительно к услугам штатного антивируса, а обратите своё внимание на сторонние утилиты, к примеру, «DoctorWeb Curelt», «Malwarebytes» и «Adwcleaner». Проверьте всё тесно связанное с работой компьютера, включая внешние устройства хранения информации, которые подключались ранее к компьютеру, так как не исключено, что основная «зараза» засела именно там.
- Проверьте операционную систему на целостность компонентов, для этого:
Процесс сканирования и внесение правок может быть продолжительным, но прерывать функционирование утилиты не рекомендуется. Дополнительно после завершения работы «sfc/scannow» можно обратиться к помощи команды «dism.exe /online /cleanup-image / restorehealth», инициировать работу, которой можно с помощью той же командной строки.
- Также будет не лишним проверить используемые жёсткие диски и/или твердотельные накопители и наличие битых секторов, ошибки. Для этого подойдёт хотя бы штатная утилита «CHKDSK».
Вышеизложенные рекомендации носят обобщённый характер, так как их применение обосновано не только при возникновении каких-либо проблем в работе операционной системы, но и как профилактические меры по поддержанию качества функционирования Windows. Если ошибка не нашла своего решения и продолжается «терзать» пользователя, то следует прибегнуть к более точечным проверкам, которые заключаются в следующем:
- «Проверка реестра»:
Также будет не лишним прибегнуть к функционалу программы «CCleaner» для проверки реестра на ошибки. Основную проблему это может не решить, но добиться улучшения общего состояния операционной системы вполне реально.
- «Проверка корректности используемого драйверного обеспечения». Откройте «Диспетчер устройств» и удостоверьтесь, что все компоненты полностью работоспособны и среди них нет неизвестного устройства, которое было бы помечено жёлтым треугольником с восклицательным знаком внутри. Дополнительно можно обратиться к специализированному софту и проверить актуальность всех используемых драйверов.
- «Проверка качества работы программного обеспечения». Если рассматриваемая проблема проявилась при открытии какой-либо программы или игры, то попробуйте полностью удалить их и установить заново, но удостоверившись в том, что возможности вашего компьютера, а также версия операционной системы соответствует техническим требованиям продукта. Если игра была получена не совсем «честным/законным» путём, то попробуйте скачать другой репак или сменить основной источник. Если вы уверены в том, что вирусного программного обеспечения нет и проблема проявляется в отдельно взятом программном обеспечении при любых манипуляциях с ним, то можно попробовать внести данное ПО в список исключения DEP, для этого:
Перезагрузите компьютер и проверьте качество работы Windows и работоспособность нужной вам программы/игры.
Заключение
К сожалению, как видно из всего представленного выше, в рассматриваемой ошибке нет каких-то конкретных причин возникновения. «Access violation», как и её собратья, является лишь следствием каких-либо сбойных моментов в работе Windows, поэтому и все приведённые рекомендации направлены на восстановление штатной работы OS. Всё сказанное в начале про переустановку Windows таковым и остаётся и в завершении статьи.
openclo 2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
||||
1 |
||||
19.04.2017, 21:05. Показов 30066. Ответов 16 Метки нет (Все метки)
Помогите, пожалуйста, я пишу тренажер. Цель программы: при нажатии на клавишу, которая была выбрана рандомом , шрифт(то, что написано в Caption), вместо 15, становился 8 и при этом выбиралась новая клавиша и у неё менялся шрифт на 15… Если нажата клавиша, которая не имеет на данный момент шрифт 15, всё оставалось как прежде, пока не будет нажата нужная нам клавиша…. Всё реализовал, но иногда при выполнении выскакивает ошибка (после нажатия клавиши): «Access violation at address 005CEB83 in module ‘Project1.exe’. Read of address 00000074.»
__________________
0 |
882 / 584 / 179 Регистрация: 28.02.2017 Сообщений: 2,359 Записей в блоге: 1 |
|
19.04.2017, 21:41 |
2 |
Какой кошмар… Зачем стока дизайн-тайм кнопок? FormKeyDown?
0 |
2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
|
19.04.2017, 21:48 [ТС] |
3 |
Код я не чистил… не педант…. а сразу выложил, чтобы узнать в чём суть проблемы…. Миниатюры
0 |
northener пофигист широкого профиля 4602 / 3062 / 850 Регистрация: 15.07.2013 Сообщений: 17,660 |
||||
20.04.2017, 02:58 |
4 |
|||
Всё реализовал, но иногда при выполнении выскакивает ошибка (после нажатия клавиши): «Access violation Тебе повезло! Твоя ошибка была замечена процессором, в результате чего ты получил соощение об AV.
Что есть name в этом коде?
0 |
openclo 2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
||||
20.04.2017, 06:20 [ТС] |
5 |
|||
Там ниже написано…..
Классно, конечно, что вы знаете, что эта за ошибка, но мне нужно именно решение данной проблемы…..
0 |
2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
|
20.04.2017, 07:13 [ТС] |
6 |
Наверное, вся суть проблемы из-за чего происходит данная ошибка, заключается в том, что во время ошибки (когда нажимаю «Break») я просматриваю свою переменную «TButton(FindComponent(Name)).Font.size», то она имеет значение: «inaccessible value»… Миниатюры
0 |
882 / 584 / 179 Регистрация: 28.02.2017 Сообщений: 2,359 Записей в блоге: 1 |
|
20.04.2017, 07:25 |
7 |
Я не вижу объявления Добавлено через 1 минуту
0 |
Модератор 8255 / 5477 / 2249 Регистрация: 21.01.2014 Сообщений: 23,578 Записей в блоге: 3 |
|
20.04.2017, 12:07 |
8 |
Надо подумать как это всё сделать иначе Мне как-то вот так подумалось Миниатюры
0 |
2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
|
20.04.2017, 22:35 [ТС] |
9 |
Я извиняюсь за свою упертость и не профессионализм, но скажите мне, пожалуйста, из-за чего у меня появляется данная ошибка?
0 |
Модератор 8255 / 5477 / 2249 Регистрация: 21.01.2014 Сообщений: 23,578 Записей в блоге: 3 |
|
21.04.2017, 07:19 |
10 |
openclo, а Вы можете сказать, почему у меня сегодня машина не завелась? Вот так вот, не видя самой машины? Вот и я ничего не могу сказать, не видя Вашего проекта… Именно проекта, а не того кода, который Вы уже выкладывали… Требуется как минимум пройтись по нему дебагером… Упакуйте в архив файлы *.pas, *.dfm, *.dpr и загрузите в тему…
0 |
2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
|
21.04.2017, 23:49 [ТС] |
11 |
offtop: жаль, что ваши первые два вопроса про машину — риторические…
0 |
northener пофигист широкого профиля 4602 / 3062 / 850 Регистрация: 15.07.2013 Сообщений: 17,660 |
||||||||||||
22.04.2017, 02:17 |
12 |
|||||||||||
Решение
К https://www.cyberforum.ru/post10350191.html добавлю ещё вопрос. Чему в данном коде равно name?
есть «бред сивой кобылы в темную мартовксую ночь»! Я бы возможно помог бы её исправить, но не зная задачи её исправить невозможно. Добавлено через 30 минут
Из сообщения об ошибке «Read of address 000000хх» ясно что была попытка обращения к объекту с адресом 0. Теперь читаем справку по TComponent.FindComponent и проясняем для себя, что FindComponent есть функция, которая возвращает nil, если компонент с таким именем не найден на форме.
1 |
openclo 2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
||||||||
22.04.2017, 21:05 [ТС] |
13 |
|||||||
всё… Спасибо большое «northener» за пост, единственный человек, который реально помог и услышал, какой ответ я хотел получить…. Если кому интересно, проблема была в функции «rando»…. Она генерировала число 0 => такой клавиши не было (button0) и, поэтому, вылазила ошибка… Исходное:
Исправленное:
0 |
D1973 Модератор 8255 / 5477 / 2249 Регистрация: 21.01.2014 Сообщений: 23,578 Записей в блоге: 3 |
||||
23.04.2017, 07:16 |
14 |
|||
Не по теме:
какой ответ я хотел получить Т.е. все остальное в этом коде — по фэншую
Исправленное: А зачем отдельная функция в несколько строк, да еще и с параметром, который не используется, если есть функция RandomRange из модуля Math
0 |
2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
|
23.04.2017, 08:15 [ТС] |
15 |
Про RandomRange в Delphi не знал… Знал только, что в python’e есть что-то похожее….
0 |
D1973 |
23.04.2017, 09:14
|
Не по теме:
Про RandomRange в Delphi не знал… т.е. тот код, который я Вам в качестве примера привел, еще 3 дня назад — Вы и не посмотрели… Ну, дело-то хозяйское…
0 |
2 / 2 / 0 Регистрация: 17.04.2017 Сообщений: 33 |
|
23.04.2017, 11:20 [ТС] |
17 |
Я просил мне написать по поводу ошибки, точнее, из-за чего она появляется, а не писать мне новую программу….
Всё реализовал, но иногда при выполнении выскакивает ошибка (после нажатия клавиши): «Access violation at address 005CEB83 in module ‘Project1.exe’. Read of address 00000074.»
0 |
Skip to content
Основная проблема с которой сталкиваются пользователи ПК — является «синий экран смерти». Его появление может свидетельствовать о проблемах с исполняемыми системными файлами которые подверглись изменениям или перезаписыванию. Решение возникших сложностей не всегда можно назвать простыми. Одни решаются буквально за пару минут, а у других следует определить корень. Исходя из информации которую нам предоставляет Windows, мы следует процедуре восстановления повреждённых объектов файловой системы. Некоторые ради экономии времени или по незнанию начинают полную переустановку, но мы с Вами попытаемся решить ошибку без данной процедуры.
Причины возникновения и разновидности
Нам хотелось бы выделить основные текстовые и кодовые представления ошибки встречаемые пользователями. В большинстве случаев помогает полная переустановка системы. Данная процедура решит большинство проблем, при перезаписи исполняемых файлов. Замена битых файлов совершенно новыми — один из вариантов решения.
Основной причиной возникновения можно назвать нарушение целостности системы. При рассмотрении ошибки «Access violation» мы взяли за исходные материалы сами исполняемые процессы. При детальном рассмотрении можно обнаружить, что процесс обращается к .dll файлам у которых затёрты заголовоки. В результате мы видим на экране «Access violation at address $ (где символ $ — код процесса) in module«. Определение причины по коду можно сделать из панели администрирования Windows.
Дополнительной серьезной причиной могут служить битые секторы в которые при дефрагментации были записаны корневые файлы. Обычно это драйвера или .dll-ки папки Виндовс.
Способы решение ошибки
Нам потребуется заняться восстановлением целостности системы. Хорошо поможет специальная команда встроенная в операционную систему. Для ее вызова, следуем инструкции:
- Нажимаем WIN+R для открытия диалогового окна ввода команды.
- Пишем команду cmd и нажимаем ОК.
- На экране отобразится терминал работы с системой:
- Вводим команду «sfc/scannow«.
- Нам предложат перезагрузить систему для исправления ошибок.
- Перезапускаемся и ничего не нажимаем. Начнется автоматическая проверка целостности файлов.
- После запуска, вновь заходим в терминал и вводим команду «chkdsk C: /f /r«. Она проверит жесткие диски на битые секторы и заблокирует их, предварительно перенеся файлы в безопасное место.
- Ошибка Access violation at address должна исчезнуть.
Второй способ заключается в стандартных действиях которые каждый пользователь должен выполнять ежедневно.
- Займитесь проверкой и обновлением системы до последней версии.
- Обновите драйвера видеокарт, если Access violation появляется при запуске игры.
- Исполняемые файлы VC++ должны быть в актуальном состоянии. Скачать можно с официального сайта Microsoft.
- Произведите дефрагментацию диска С. Это поможет перенести данные в рабочие секторы жесткого диска (если у вас SSD, то пропускаем шаг).
( 1 оценка, среднее 2 из 5 )
When you install a software program, whether that’s a video game, word processing application, or a media player, you expect it to work when you launch it and stay working when in use. Unfortunately, if you have corrupted software or memory that is damaged, you may find that you are unable to access certain pieces of software as you normally would.
![Exception Access Violation Error Code Example](https://www.troubleshootingcentral.com/wp-content/uploads/2020/10/Exception-Access-Violation-At-Address-Error-Image.png?ezimgfmt=ng%3Awebp%2Fngcb15%2Frs%3Adevice%2Frscb15-1)
When access is denied, you end up with an access violation error, which often reads “Exception_Access_Violation” with an error code or address attached. In some cases, this error may pop up with a specific module that’s causing the problem or provide the name of the software causing the issue.
What is the Access Violation at Address Error, and Why Does it Pop Up?
The access violation at address error is Windows-specific and can occur on all operating system versions, including Windows 10. If you have been getting this error, it means that the software you are attempting to launch or run is trying to access a protected memory address. When this occurs, the attempt to access the protected memory is denied, as the program you are trying to run should not have access to this particular address except for the program that is currently using it.
How to Read the Numeric Error Code?
In most cases, the error will be accompanied by a numeric code that is between 7-10 digits in length. For example, 0xC0000005 is a broad access violation error that prevents users from playing audio or accessing the control panel. When you see a numeric error code pop up, you can debug it by reading the exception parameters (the letter and numbers). The first exception parameter (0) will tell you the type of violation, the second exception parameter (1) will tell you the address. You can use this code to identify the cause of the problem and potentially the fix for it as well.
To help you with your access violation at address error, we’ve compiled 9 easy to try solutions below.
1. Inspect Your Computer for a Malware Infection.
If any of your software is heavily infected with malware, it can corrupt your memory systems which can cause this error to pop up. If you’ve noticed your computer acting up before getting an access violation at address error, such as unprovoked alerts or fake browser windows, then a detailed and deep scan should be done. If you’re just using the built-in antivirus software and it doesn’t find anything, you may want to try another option to see if a malware infection was missed. Getting rid of the malware will solve the issue.
2. Add Your Program to an Exception Access List.
If you have no malware on your computer, you can add the program that you want to run to a data execution prevention exception list. This will allow you to run the program despite the error code. Here is how to do this.
- In your computer’s search bar, type in “control panel” and open it.
- You’ll want the system choice here.
- Click into system and security.
- In the system menu, click on the advanced system settings.
- In the advanced tab, find the performance section and hit settings.
- Across the top, click onto the data executive prevention tab.
- The section option will allow you to turn on data execution prevention for all programs and services except those that you choose.
- Click the add button and find your program’s .exe file.
- Add it to the list, hit apply, and then okay to save the changes.
Run the program again and check to see if you still get the access violation at address error.
3. Consider Disabling User Account Control.
If you are trying to install or run a Java-based program, the access violation at address is more likely to occur. To fix this issue, you can temporarily disable the user account control to fix the error from coming up. This does have a slight security risk to it, so if you are uncomfortable with this method, disable user account control when you run your desired application and then turn it back on.
- In your computer’s search bar, type in “control panel” and open it.
- Find the “user accounts” and click into it – twice.
- Choose the last option, which is to change the settings of the user account controls.
- This window allows you to set when you get notified about changes to your computer. Move the slider down to “never notify” and hit okay.
- Try running your program now.
If your program runs, just remember to fix your user account settings once you are done with it for the day.
4. Double Check Your Software Isn’t in Read-Only Mode.
If your program is in a read-only mode, access is going to be denied and it won’t be able to launch or run effectively. Here is how to check this and fix it.
- Find the shortcut on your desktop and right-click on the file.
- Choose the properties option from the menu.
- Find the “general” tab located at the top of the window.
- Find the attributes section and make sure read-only is not checked.
- If it is checked, uncheck it.
- Hit apply/okay to save changes.
If your program does not have a desktop shortcut, you can either make one and follow the same steps or right-click on the .exe application file and follow the above steps.
5. Check Your RAM for Corruption.
If you ever had a heavy malware infection on your computer and it managed to cause damage to portions of your random access memory (RAM), then this could be the cause behind your access violation at address error. To check your RAM for corruption, do the following.
- In your computer’s search bar, type in “Windows memory diagnostic”.
- Run the program.
- Choose the first option which is to restart and check for issues.
- Let it run and wait for the results.
If your RAM is corrupted, you should replace it.
6. Troubleshoot Your Hardware.
Some individuals have had luck in fixing the access violation at address error by resolving issues with their hardware.
- In your computer’s search bar, type in settings, and open it. Or if you are on Windows 10, press down the Windows key + I at the same time.
- Click on the “update and security” section.
- In the left-hand menu, find troubleshoot and click it.
- Run it and follow the on-screen instructions.
Once the troubleshooting has finished, try running your program again to see if the access violation error has been resolved.
7. Run Your Program in Compatibility Mode.
If you are trying to run an older program, it may not be fully compatible with a newer operating system like Windows 10. If you are getting the access violation at address error and it’s pointing directly to the software program, then it may be a compatibility issue.
- Find your program’s shortcut on your desktop and right-click the file.
- Choose the properties option from the menu.
- At the top of the properties menu, find the compatibility tab.
- Choose to “run this program in compatibility mode” and select an older version of Windows, such as Windows 8.1/7.
- Hit apply and okay to save the changes.
- Run the program and see if the issue persists.
You may need to try different compatibility modes depending on how old the program is that you are running.
8. Reinstall the Problematic Software.
It is quite possible that the program you are trying to run has either had portions of it damaged or corrupted from crashes or improper saves or a recent update to it has caused issues. This, in turn, may be the reason behind why the program is now causing access violation errors. Try reinstalling the application to see if the problem persists. To uninstall, do the following.
- In your computer’s search bar, type in settings or hit the Windows key + I at the same time.
- Choose “apps” from the menu.
- Find the application that will not run or launch in the list.
- Click uninstall.
You can also uninstall by going to your computer’s control panel, choosing the programs and features option, and clicking on the uninstall button. If you prefer this method, find the program in the list and hit the uninstall button. Once fully uninstalled, you will need to re-download the program and do a fresh install.
Добрый вечер, коллеги. Такой вопрос.
Работаешь — примерно 10-20 минут за Лоцманом и начинает постоянно вылетать ошибка следующего рода:
Access violation at address 00574C7B in module «loodsman.exe». Read of address 00000004
Класс ошибки EAccessViolation
(00173C7B){Loodsman.exe} (00574C7B) cxClasses.TcxObjectLinkController.RemoveLink+$1B
windows XP professional ver 5.1 сборка A28, «Service Pack 3»
intelpentium 4 cpu 3.00Ghz DDR 1023
Так же бывает что просто Лоцман открыт и не трогается в течении рабочего дня и вылетает примерно такая же ошибка — только адреса разные. Причем это проблема не на всех ПК.
Что это может быть? Гуглил по поводу этой ошибки — разброс от того, что это проблемы программы самого лоцмана (ссылки указатели и тд) так и самой системы.
Очень буду рад услышать возможные решения. Спасибо.
Встречается такое иногда, способа лечения два или переустановить полностью Комплекс или переустановить полностью систему. Однозначного ответа нет. Переустановка (даже системы) времени займет меньше, чем поиск ошибки.
Спасибо. А можно ли с данной ошибкой обратится к офф тех поддежку? или пошлют куда подальше.
Запускал с помощью отладчика OllyDbg и нужно раза 2-3 нажать запустить отладку чтобы запустился лоцман, а при этом экспешены выдает по не сущь адресу и появляются ошибки потоков. Одна беда — запустилась отладка. Даже самое бональное лазить по дереву и вылетает лоцман и в отладчике около 5 потоков красным и куча красных значений в стеках.
Особо не разберался с программой — как правильно работать с ней, но факт есть факт.
Хммм, еще нашел что-то связанное с делфи — то есть на делфи написан лоцман? и как раз в поиске на ошибку выше много сылок на программирование на делфи.
Кто может поделится еще какими нибудь наблюдениями?
Спасибо.
Обычно такая ошибка возникает, когда что-то настроено криво, какой-то компонент не зарегистрирован или вообще не установлен. Ошибку ищите у себя, проверьте правильность установки и настройки, согласно инструкции к программе.
Спасибо.
Еще такой вопрос — постоянно идут всякие обнавления Windows. Могут ли обновления вызвать такую реакцию?.
Цитата: neo_kot от 16.11.11, 10:55:00
Спасибо.
Еще такой вопрос — постоянно идут всякие обнавления Windows. Могут ли обновления вызвать такую реакцию?.
Кто ж такое знает?
У нас на некоторых машинах вот уже несколько лет включены обновления Windows и таких ошибок никогда не возникало, а бывает только систему поставили, комплекс установили и сразу полезли подобные ошибки.
Мы сейчас почти никогда не ищем причину, а просто переустанавливаем, так быстрей, проверено.
Цитата: Sabahs от 16.11.11, 08:41:03
Обычно такая ошибка возникает, когда что-то настроено криво, какой-то компонент не зарегистрирован или вообще не установлен. Ошибку ищите у себя, проверьте правильность установки и настройки, согласно инструкции к программе.
Ошибка класса EAccess Violation возникает при попытки обращения к недействительной памяти, доступ к странице памяти с неверным доступом.
Не понятно, почему с настройками — так как ошибки были бы другого рода. И + то, что раньше работал нормально лоцман.
Цитата: tur от 16.11.11, 12:54:16
Кто ж такое знает?У нас на некоторых машинах вот уже несколько лет включены обновления Windows и таких ошибок никогда не возникало, а бывает только систему поставили, комплекс установили и сразу полезли подобные ошибки.
Мы сейчас почти никогда не ищем причину, а просто переустанавливаем, так быстрей, проверено.
Спасибо.
Больше всего заставляет задуматься, что при старте отладки уже валятся кикае то проблемы — значит вполне (когда происходят какие то определенные условия) просто этот адрес не тем процессом освобождается, перезаписывается, или что-то еще делает.
А может вирус какой что-то портит ) будем пока дальше ковырятся.
Это же винда )))))
ЗЫ
А может кто знает — Лоцман 10 как с MS SQL 2008? )))))
Цитата: Вячеслав от 16.11.11, 13:39:58
У меня работал нормально, проблем не было.
На одной машине без проблем, а когда 30 пользователей и много-много рабочих мест, каких только ошибок не вылазит (можно даже тему приколов на форуме открыть «Ошибки вызванные работой Лоцмана»).
Цитата: Pollitruk от 16.11.11, 16:41:55
если вы лицензионный пользователь, то не пошлют
Да, лицензия есть.
Цитата: Вячеслав от 16.11.11, 16:55:50
Работа Лоцмана связана с работой СУБД, работой сети и её компонентов, работой самой ПЭВМ, пользовательских настроек, настроек конфигурации и т.д. и т.п.
Но, как всегда виноват ЛОЦМАН…
Какой-то чудак на букву М отключил switch — ЛОЦМАН плохой.
кто-то базу угробил — ЛОЦМАН плохой.
машина вирусами напичкана — ЛОЦМАН плохой.
у пользователя нет прав ни на что на машине — ЛОЦМАН плохой.Каждый день одно и то же, ну хоть бы какое-то разнообразие!
![]()
![]()
![]()
![]()
![]()
С правами все нормально, субд работает нормально, сеть тоже нормально работает, настроено тоже все.Насчет MS SQL 2008 опробуем.
Появилась еще одно чудо ))) работаешь в лоцмане — отправляешь сохранить и данные в карточке и тд заблакированы (не активны), пробуешь перейти по закладке — там другая бд или другой объект в работе и лоцман просто сворачивается …. Хмм.
Цитата: neo_kot от 17.11.11, 08:43:25
Появилась еще одно чудо ))) работаешь в лоцмане — отправляешь сохранить и данные в карточке и тд заблакированы (не активны), пробуешь перейти по закладке — там другая бд или другой объект в работе и лоцман просто сворачивается …. Хмм.
Подробнее можно?
Непонятно про закладку.
Цитата: tur от 17.11.11, 10:12:38
Подробнее можно?
Непонятно про закладку.
Выбираю бд и снижу появляется закладка с именем бд — далее берем в работу, работаем-работаем…… выбираем сохранить и элементы становятся не доступными (карточка, атрибуты). Дерево активно, но если выбрать другую деталь ничего не отображается, а если выбрать снизу закладку базы, лоцман просто сворачивается (закрывается).
- Форум пользователей ПО АСКОН
-
►
Профессиональные вопросы -
►
Инженерный документооборот -
►
Access violation at address
2001 г Ловим баги или Почему программы допускают «недопустимые операции»Е. Левшаков, В. Ковалев, mcsa.ru Ошибки — неизбежное зло программирования. Видимо, пока трудно даже представить средство с помощью которого можно избавится от них. Человеку, который выдумает это чудодейственное лекарство, благодарные потомки-программисты, несомненно, воздвигнут памятник. Пока же остается лишь заниматься обычным делом: ловлей багов. «Нарушение Доступа» — фраза, которую пользователи видят, когда приложение делает попытки обратиться к памяти, которая не обозначена для их использования — и как следствие происходит сбой в работе программы: Access violation at address <HEX_value> in module <Application.Exe>. Read of address <HEX_value_2> Ситуация, при которой Windows давала бы полную свободу программам — записывай данные куда хочешь, скорее всего бы привела к разноголосице программ и полной потери управления над компьютером. Но этого не происходит — Windows стоит на страже «границ памяти» и отслеживает недопустимые операции. Если сама она справиться с ними не в силах — происходит запуск утилиты Dr. Watson, которая записывает данные о возникшей ошибке, а сама программа закрывается. Известно, что при программировании, особенно крупных программных продуктов, уследить за всеми процессами в коде невозможно, да и нет необходимости. Использование сторонних компонентов и библиотек только усложняет дело. Именно поэтому программисты Delphi порой и сталкиваются со «своенравными» программами, которые то и дело норовят «сбросить пользователя». Итак, давайте рассмотрим некоторые вопросы, связанные с корректной средой программирования, так и непосредственно проблемы написания кода, которые ведут к возникновению ошибок типа «ошибка доступа» (AVS) и очертим наиболее известные пути их исправления. Мы можем поделить AVS, с которыми сталкиваются при разработке в Delphi, на два основных типах: ошибки при выполнения и некорректная разработка проекта, что вызывает ошибки при работе программы. Ошибки возникают при старте и закрытии Delphi или формировании проекта. Причиной могут являться сбои в «железе» компьютера. Эти ошибки могут быть вызваны различными источниками, включая систему BIOS, операционную систему или аппаратные подпрограммы драйверов. Некоторые видео-, звуковые или сетевые платы могут фактически вызывать подобного рода ошибки в Delphi. Для решения подобных аппаратных проблем можно предпринять последовательность неких «стандартных» ходов:
И в конце концов просто попытаться заменить драйвера на более свежие. Но помимо чисто железных проблем — большую головную боль могут вызвать ошибки в работе программного обеспечения. Особенно это касается непосредственно операционной системы. Зачастую Windows терпит крах спонтанно. Вот рекомендации которые помогут вам создать более устойчивую среду программирования: Хотя Windows 9X популярная система, разработку лучше проводить в Windows NT или Windows 2000 — это более устойчивые операционные системы. Естественно, при переходе на них придется отказаться от некоторых благ семейства Windows 95/98/Me — в частности, не все программы адаптированы для Windows NT/2000. Зато вы получите более надежную и стабильную систему. Не забывайте о том, как важно всегда иметь под рукой свежие версии компонентов для Delphi и дополнительных библиотек. В отличие от Windows создатели данных пакетов стараются от версии к версии уменьшать количество ошибок. Следите за тем, чтобы устанавливаемые компоненты были предназначены непосредственно для вашей версии Delphi. Попробуйте деинсталлировать чужеродные компоненты один за другим (или пакет за пакетом), пока проблема не будет устранена. Контролируйте все программные продукты, установленные на вашей машине и деинсталлируйте те из них, которые сбоят. Фаворитами AV среди них являются шароварные утилиты и программы и бета версии программных продуктов. Все вышеперечисленное в основном не касалось самого процесса программирования и в малой степени зависит от разработчика. Теперь же обратимся к теме, как не допустить при разработке программного продукта ситуации, при которой он сам будет являться причиной ошибки. Вы могли бы рассмотреть компилирование вашего приложения с директивой {$D}, данная директива компилятора может создавать файлы карты (файлы с расширением map, которые можно найти в том же каталоге, что и файлы проекта), которые могут послужить большой справкой в локализации источника подобных ошибок. Для лучшего «контроля» за своим приложением компилируйте его с директивой {$D}. Таким образом, вы заставите Delphi генерировать информацию для отладки, которая может послужить подспорьем при выявление возникающих ошибок. Следующая позиция в Project Options — Linker & Compiler позволяет вам, определить все для последующей отладки. Лучше всего, если помимо самого выполняемого кода будет доступна и отладочная информация — это поможет при поиске ошибок. Отладочная информация увеличивает размер файла и занимает дополнительную память при компилировании программ, но непосредственно на размер или быстродействие выполняемой программы не влияет. Включение опций отладочной информации и файла карты дают детальную информацию только если вы компилируете программу с директивой {$D+}. Эта информация состоит из таблицы номеров строк для каждой процедуры, которая отображает адреса объектных кодов в номера строк исходного текста. Директива $D обычно используется совместно с другой директивой — $L, что позволяет или запрещает генерацию информации о локальных символах для отладки. Таким образом вы без труда сможете найти точный адрес той подпрограммы, которая была ответственна за ошибку. Одна из наиболее общих причин ошибок выполнения — использование объекта, который еще не был создан. Если второй адрес при выдачи ошибки — FFFFFFF (или 0000000) Вы можете почти утверждать, что было обращение к объекту, который еще не был создан. Например, вызов метода формы, которая не была создана. procedure TfrMain.OnCreate(Sender: TObject); var BadForm: TBadForm; begin BadForm.Refresh; // причина ошибки end; Попытаемся разобратся в этой ситуации. Предположим, что BadForm есть в списке «Available forms» в окне Project Options|Forms. В этом списке находятся формы, которые должны быть созданы и уничтожены вручную. В коде выше происходит вызов метода Refresh формы BadForm, что вызывает нарушение доступа, так как форма еще не была создана, т.е. для объекта формы не было выделено памяти. Если вы установите «Stop on Delphi Exceptions» в Language Exceptions tab в окне Debugger Options, возможно возникновение сообщения об ошибке, которое покажет, что произошло ошибка типа EACCESSVIOLATION. EACCESSVIOLATION — класс исключение для недопустимых ошибок доступа к памяти. Вы будете видеть это сообщение при разработке вашего приложения, т.е. при работе приложения, которое было запущено из среды Delphi. Следующее окно сообщения будет видеть пользователь — и программа будет закрыта при совершение недопустимой операции: Access violation at address 0043F193 in module 'Project1.exe' Read of address 000000. Первое шестнадцатиричное число (‘0043F193’) — адрес ошибки во время выполнения программы. Выберите опцию меню ‘Search|Find Error’, введите адрес, в котором произошла ошибка (‘0043F193’) в диалоге и нажмите OK. Теперь Delphi перетранслирует ваш проект и покажет вам строку исходного текста, где произошла ошибка во время выполнения программы, то есть BadForm.Refresh. Естественно, что списка наиболее общих причин ошибок, вызывающих аварийное завершение работы программы, написанной в Delphi, в чистом виде нет. Есть несколько общих «узких мест» в коде и структуре программы, когда подобная ошибка может произойти. Перечислим наиболее распространенные. Недопустимый параметр API Если вы пытаетесь передать недопустимый параметр в процедуру Win API, может произойти ошибка. Необходимо отслеживать все нововведения в API при выходе новых версий операционных систем и их обновлений. Уничтожение исключения Никогда не уничтожайте временный объект исключения. Обработка исключения автоматически уничтожает объект исключения. Если вы уничтожите объект самостоятельно, то приложение попытается уничтожать объект снова, и произойдет ошибка. Zero:=0; try dummy:= 10 / Zero; except on E: EZeroDivide do MessageDlg('Can not divide by zero!', mtError, [mbOK], 0); E.free. // причина ошибки end; Индексация пустой строки Пустая строка не имеет никаких достоверных данных. Следовательно, попытка индексировать пустую строку — подобно попытке обратиться к нулю, что приведет также к ошибке: var s: string; begin s:=''; s[1]:='a'; // причина ошибки end; Обращение к динамической переменной Вы должны строить обращение к динамической переменной корректно, иначе вы перемещаете адреса указателей и возможно разрушаете другие выделенные ячейки памяти. procedure TForm1.Button1Click(Sender: TObject); var p1 : pointer; p2 : pointer; begin GetMem(p1, 128); GetMem(p2, 128); {эта строка может быть причиной ошибки} Move(p1, p2, 128); {данная строка корректна } Move(p1^, p2^, 128); FreeMem(p1, 128); FreeMem(p2, 128); end; Перечисленные подходы позволят избежать наиболее частых недочетов в разработке, которые могут вызвать столь неприятное как для пользователя, так и для разработчика сообщение о том, что программа выполнила «недопустимую операцию». Удачной вам ловли багов, господа! |