Сайт о телевидении

Сайт о телевидении

» » Access violation причины

Access violation причины

Синие экраны либо экраны гибели BSOD – довольно частое явление для операционной системы Windows. Основное – положительно расшифровать данную ошибку и избежать ее повторения. Как же это сделать?

Вам понадобится

  • – компьютер.

Инструкция

1. Установите причину возникновения ошибки 0xc0000005. Она возникает при запуске всякий программы в операционной системе Windows, также бывает вариант полного падения системы с данной оплошностью. Самые распространенные поводы, вызывающие происхождение ошибки 0xc0000005 – ошибки реестра, неисправность памяти либо других устройств, вирусы, некорректные драйвера. Другие варианты происхождения сообщений об ошибке: «Оплошность при инициализации приложения», Exception: access violation (0xC0000005). Данный код говорит о неверном обращении к памяти, возникающем по различным причинам. Следующие шаги помогут устранить возникновение ошибки memory access violation.

2. Исполните чистку реестра. Ошибки могут в нем скапливаться по мере того, как приложения открываются и закрываются, меняются их настройки, программы удаляются и устанавливаются, исключительно если они удаляются некорректным образом, либо больше новые программы ставятся поверх ветхих. Дабы устранить данные ошибки используйте особые программы для чистки реестра, скажем, CCleaner. Скачать программу дозволено с официального сайта http://www.piriform.com/ccleaner.

3. Установите самую новую версию верной антивирусной программы и проведите полную проверку системы. К примеру, дозволено скачать лечащую утилиту CureIt! от DrWeb и с ее поддержкой проверить систему на присутствие вирусов, дабы избавиться от ошибки access violation.

4. Удостоверитесь, что память, установленная в компьютере, совместима с ним и ее размер не превышает возможного лимита. Если все верно, испробуйте убрать новую планку памяти и если оплошность огромнее не возникает, значит повод в ней. Протестируйте память, дабы быть уверенными, с применением программы MemTest86. Если будут обнаружены ошибки, значит память нужно заменить.

5. Проверьте, не подмечено ли в функции Windows «Предотвращение выполнения данных» приложение, при запуске которого появляется оплошность. Данная функция применяется для дополнительных проверок памяти, дабы недопустить вредный код. Добавьте доверенные программы в исключения из ПВД, дабы убрать возникновение ошибки access violation.

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

  • Если оплошность возникает всякий раз позже установки приложения, то есть без ошибки оно ни разу не запускалось, то поводом может быть некорректная установка приложения, либо же его несовместимость с вашей системой. Испробуйте всецело деинсталлировать приложение и опять его установить. Если оплошность по-бывшему возникает, испробуйте запустить приложение в режиме совместимости. Для этого щелкните по ярлыку запуска приложения правой кнопкой мыши и откройте «Свойства». Перейдите на вкладку «Совместимость». Установите флажок «Запускать программу в режиме совместимости» и выберите версию Windows, с которой программный продукт гарантированно совместим. Если вы не знаете, какой должна быть версия, примитивно пробуйте всякую ступенчато, весь раз нажимая «Ок» либо «Применить» и пробуя запустить приложение с поддержкой этого ярлыка, пока оплошность не будет устранена.
  • Если прежде приложение запускалось и работало без ошибок, испробуйте примитивно перезагрузить компьютер. Допустимо, в итоге долгой работы разных программ и элементов операционной системы нарушено разделение памяти, и позже перезагрузки ваше приложение заработает.
  • Поводом ошибки могут быть русские символы в пути к исполняемому файлу. Всецело деинсталлируйте приложение, при повторной установке предпочтя путь, не содержащий русских символов.
  • Проведите полное сканирование системы на вирусы. Допустимо, повод ошибки — активность вредного программного обеспечения, внесенного на ваш компьютер.
  • Причиной ошибки может быть физический перегрев модулей памяти, что приводит к их некорректной работе. В этом случае дабы поправить ошибку приложения отключите компьютер, откройте корпус и старательно пропылесосьте все электронные компоненты. Помимо того, дозволено опрятно извлечь модули памяти и опять установить их в соответствующие разъемы — это поможет удалить образовавшийся слой окислов на контактах модулей и восстановить электропроводимость соединений.
  • Оплошность BSoD либо «Синий экран гибели» может возникнуть у всякого пользователя на любом компьютере. В такой обстановки основное не паниковать и следовать отчетливому алгорифму действий. Возможнее каждого, поправить ее довольно легко.

    Вам понадобится

    • диск поправления системы.

    Инструкция

    1. Подавляющее множество синих экранов возникает из-за порчи системных файлов либо установки ложных драйверов для оборудования. Если операционная система не может механически поправить данную ошибку, она выдает на экран определенное сообщение. Изучите написанный в синем экране текст. Изредка он содержит наименования файлов либо оборудования, из-за которых случилась данная оплошность.

    2. Испробуйте перезагрузить компьютер. Изредка это помогает на некоторое время избежать повторного возникновения синего экрана.

    3. Обратите специальное внимание на все то, что написано ниже строчки Technical information. Обыкновенно именно там содержатся наименования испорченных файлов, скажем: epusbdks.sys, alcxwmd.sys и gv3.sys.

    4. Если вы не знаете призвание этих файлов, то запустите программу поправления системы. Откройте панель управления и перейдите к меню «Система и безопасность». Выберите меню «Архивация и поправление» и перейдите к пункту «Восстановить системные параметры либо компьютер».

    5. Нажмите кнопку «Запуск поправления системы», выберите одну из ранее сделанных контрольных точек и нажмите кнопку «Дальше». Перезагрузите компьютер позже заключения процесса поправления.

    6. Изредка дозволено додуматься, в чем заключается повод происхождения ошибки. Возможен, что в тексте синего экрана фигурирует файл под наименованием ati.sys. Видимо, что повод сбоя системы кроется в ложных либо битых файлах драйверов для видеокарты.

    7. Перезагрузите компьютер и запустите неопасный режим Windows. Вам понадобится нажать F8 либо F12 для происхождения меню выбора вариантов загрузки. Установите свежую версию драйверов.

    Видео по теме

    Обратите внимание!
    Восстановить систему дозволено без доступа к ней. Для этого вам потребуется диск, с которого вы устанавливали OC.

    Для поиска и устранения причин появления задач, выражающихся в происхождении сообщений об ошибках, понадобится запуск Windows Vista либо Windows 7 с применением малейшего комплекта драйверов и механически загружаемых программ, именуемый «чистым запуском».

    Инструкция

    1. Нажмите кнопку «Пуск» для вызова основного меню системы и введите значение msconfig.exe в поле строки поиска для запуска программы настройки системы.

    2. Нажмите клавишу Enter для подтверждения выполнения команды и введите пароль менеджера компьютера (при необходимости) для подтверждения своих полномочий.

    3. Примените флажок на поле «Выборочный запуск» на вкладке «Всеобщие» открывшегося окна «Конфигурация системы» и снимите флажок на поле «Загружать элементы автозагрузки».

    4. Перейдите на вкладку «Службы» и примените флажок на поле «Не отображать службы Microsoft».

    5. Нажмите кнопку «Отключить все» и удостоверите свой выбор нажатием кнопки OK.

    6.

    7. Повторите все вышеописанные действия для возврата к вкладке «Служба» и примените флажок на поле «Не отображать службы Microsoft».

    8. Примените флажки у половины служб в списке «Службы» и нажмите кнопку OK для подтверждения своего выбора.

    9. Выберите пункт «Перезагрузка» и дождитесь окончания операции.

    10. Повторяйте все вышеописанные действия в случае возникновения сообщений об ошибке до обнаружения службы их вызывающей. Если службы, вызывающие задачу, отсутствуют, исполните следующие действия.

    11. Исполните чистый запуск и перейдите на вкладку «Автозагрузка».

    12. Примените флажки на полях половины элементов списка «Элемент автозагрузки» и нажмите кнопку OK для подтверждения своего выбора.

    13. Выберите пункт «Перезагрузка» и дождитесь окончания операции.

    14. Повторяйте данный алгорифм действий для обнаружения элемента автозагрузки, вызывающего задачи.

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

    16. Запустите программу поправления системы и снимите флажок на поле проблемного элемента позже ее заключения.

    17. Нажмите кнопку «Пуск» для входа в основное меню системы и введите значение msconfig.exe в строке поиска для установки компьютера на обыкновенный запуск.

    18. Нажмите клавишу Enter для выполнения команды и перейдите на вкладку «Всеобщие» открывшегося диалогового окна.

    19. Выберите параметр «Обыкновенный запуск» и нажмите кнопку OK для выполнения команды.

    20. Удостоверите выполнение перезапуска компьютера в новом диалоговом окне предупреждения.

    Видео по теме

    Обратите внимание!
    Неприменение флажка на поле «Не отображать службы Microsoft» может привести к окончательному удалению всех точек поправления системы!

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

    Существует несколько причин возникновения сообщения об ошибке 0хс0000005 (оплошность при инициализации приложения), соответствующей неосуществимости запуска выбранного приложения Windows, но все они сводятся к нарушению обращения к памяти компьютера. Нужен комплекс мер для исправления ошибки.

    Инструкция

    1. Используйте специализированную программу (CCleaner, RegCleaner) для исправления накопившихся ошибок в записях системного реестра, возникающих при запуске и закрытии некоторых программ, редактировании параметров системы и некорректной установки и/или удаления определенных программ. Ручное исправление ложных записей системного реестра не может быть рекомендовано начинающим пользователям компьютера из соображений безопасности и допустимого повреждения системы.

    2. Обновите и используйте последние каталоги вирусов установленной антивирусной программы. Происхождение сообщения об ошибке может быть вызвано действиями вредного приложения, нарушающего типовые способы обращения программ к памяти компьютера.

    3. Удостоверитесь в том, что установленный модуль памяти совместим с процессором и не превышает максимальных размеров объема памяти. Может понадобиться отсоединение модуля для определения допустимого раздора оборудования.

    4. Проверьте совместимость программы, вызвавшей происхождение сообщения об ошибке, с функцией «Предотвращение выполнения данных», призванной не допустить исполнения вредного кода. Довольно зачастую «Предотвращение выполнения данных» (ПВД) воспринимает действия программы как несущие угрозу устойчивости системы и препятствует их выполнению, вызывая сообщение об ошибке 0хс0000005.

    5. Исполните создание нового профиля по умолчанию для исключения вероятности раздора между драйвером установленного принтера и остальным оборудованием системы.

    6. Проверьте видео-драйверы, обновленные не так давным-давно – возникновение ошибки при инициализации может быть вызвано несовместимостью установленных драйверов с остальным оборудованием.

    7. Откажитесь от применения Internet Explorer 6 и установите последнюю версию браузера.

    8. Будьте осмотрительны при применении антивирусного приложения Symantec Antivirus – если в сообщении об ошибке наличествует значение savrt.sys, нужно исполнить обновление программы.

    9. Удостоверьтесь в том, что на компьютере установлены последние обновления Windows и Service Packs.

    Видео по теме

    Ничто не может раздражать геймера больше, чем разнообразные ошибки, которые могут сопровождать определенные игры. Причем у каждой из ошибок есть свои причины и способы решения, и иногда приходится тратить очень много времени на то, чтобы сначала отыскать, из-за чего появилась ошибка, а затем и на то, чтобы найти действенные способы решения проблемы. Одной из самых нелюбимых ошибок геймеров является Access violation at address, которая может не только не дать вам опробовать очередную игру, но и вообще испортить саму операционную систему. Естественно, вы можете переустановить свою ОС, когда возникает эта ошибка, но сначала лучше рассмотреть другие варианты, которые не приводят к таким глобальным мерам, как переустановка системы.

    Удаление и установка

    Часто ошибка Access violation at address возникает при установке определенного программного обеспечения, в частности компьютерных игр. И если у вас эта ошибка появилась, но при этом она не блокирует действия самого компьютера, то у вас еще есть шанс спасти имеющуюся у вас информацию. Попробуйте удалить установленную программу или игру, но только через панель управления, чтобы в системе не оставалось следов пребывания. После этого можете попробовать совершить установку заново - это вполне может помочь, если что-то раньше пошло не так. Однако не стоит слишком надеяться на то, что данный метод поможет. Конечно, попробовать стоит, но готовьтесь к тому, что вам, возможно, придется больше постараться, чтобы исправить ошибку Access violation at address.

    Проблемы с DirectX

    В большинстве случаев ошибка Access violation at address вызывается наличием проблем с дистрибутивом DirectX. В первую очередь вам стоит проверить версию вашей программы и обновить ее, если она устарела. Также вам стоит попробовать сменить Input и Output у ваших устройств, а затем вернуть их обратно. Дело в том, что DirectX оказывает прямое влияние на аудиоустройства, что может приводить к серьезным конфликтам, а они уже становятся причиной того, что возникает ошибка Access violation at address. Поэтому вам лучше очень внимательно следить за тем, чтобы никаких конфликтов устройств не возникало, потому что они могут привести к необратимым последствиям.

    Жесткий диск

    Одна из наименее очевидных причин возникновения ошибки Access violation at address 00000000 может заключаться в жестком диске. Действительно, мало кто станет искать причины в жестком диске, а ведь проблема может возникнуть даже в том случае, если у вас совсем новый и качественный винчестер. Однако может случиться так, что ваш жесткий диск окажется несовместим с определенными программами или же функциями, которые они выполняют. И в худшем случае возникает данная ошибка, которую будет довольно сложно решить, если причина действительно в этом. Вам крупно повезет, если вы сможете справиться с данной проблемой без переустановки операционной системы и без форматирования диска. К сожалению, очень сложно проследить за тем, чтобы все программы устанавливались как следует, поэтому в данном случае остается надеяться на удачу, чтобы все ПО, которое вы устанавливаете, не вызывало никаких конфликтов, а особенно чтобы вас никогда не посещала ошибка Access violation.

    Специальные программы

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

    либо ее переустановка

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

    Если исходники не тайна, можешь выложить? А то так сложно что-то сказать.

    А так могу дать только общую инфу по вопросу.

    Access violation и как с ним бороться

    Севастьянов Андрей
    [email protected]

    «Access violation at address 0040CF58 in module ‘PROJECT1.EXE’. Read of address FFFFFFFF». Кто никогда не читал это сообщение – тот никогда не программировал на Delphi. С одной стороны, Delphi крайне интенсивно использует динамическую память, а с другой – человеку свойственно ошибаться. Иногда на устранение этой ошибки требуются секунды; но мне также известен случай, когда квалифицированный программист искал причину ошибки полгода…

    Access violation (в переводе «нарушение доступа») возникает при попытке чтения или записи по адресу, который в настоящее время недоступен процессу. Весьма распространенный случай – чтение или запись по адресу FFFFFFFF, то есть попытка обращения к памяти по нулевому указателю. Коварность Access violation заключается в том, что это исключение часто возникает не в месте ошибки, а гораздо позже. Например, произвели мы запись по испорченному адресу. Если повезет – сразу же наткнемся на Access violation. Но ведь эта «случайная» область памяти на самом деле может быть доступна, и занята другим объектом; тогда мы просто незаметно испортим содержимое этого объекта… Подобные ошибки могут долго накапливаться, прежде чем превратятся в Access violation или другое исключение – которое наверняка произойдет в отлаженном и проверенном фрагменте кода.
    Как ловить Access violation?

    Если бы однозначный ответ на этот вопрос существовал, он уже был бы всенародным достоянием. Ниже я приведу список десяти наиболее распространенных (по моему мнению) причин данной ошибки. Этот список не претендует на полноту, и может быть легко расширен. Когда у вас выскочит Access violation – рекомендую пройтись по списку и попытаться определить причину. Кстати, лучше заранее приготовиться к тому, что предстоит отлаживать программу и использовать блоки try...except и try…finally, функции Assigned, Assert и т. п. не только тогда, когда в них возникла необходимость, но и «про запас» – в итоге это наверняка сэкономит время.

    Итак, что может вызвать Access violation?
    1. Вызовы методов еще не созданных объектов.
    2. Вызовы методов объектов, которые не были проинициализированы в результате ошибки.
    3. Вызовы методов объектов, которые уже были уничтожены.
    4. Освобождение объектов, которые будут в дальнейшем использованы и освобождены автоматически.
    5. Выход за пределы диапазона.
    6. Неявное освобождение интерфейсов.
    7. Передача параметров.
    8. Память, выделяемая в DLL [приложении], а освобождаемая в приложении .
    9. Операции с указателями.
    10. Отсутствие синхронизации при работе с потоками.

    Рассмотрим все эти причины по порядку.

    1. Вызов методов еще не созданных объектов
    Чаще всего мы ссылаемся на еще не созданные объекты в конструкторах и в вызываемых ими обработчиках OnCreate. Самое популярное решение данной проблемы – изменить порядок инициализации форм (компонент на форме), что, однако, не рекомендуется из соображений понятности кода.
    Второй вариант – перенести код, вызывающий Access violation, в обработчик более позднего события (на момент которого объекты уже созданы). Для формы это может быть, скажем, OnShow. В крайнем случае – объект всегда может послать сам себе сообщение, которое будет обработано уже после того, как будут проинициализированы все объекты.
    Третий вариант – перед обращением к объекту каждый раз проверять, существует ли он.
    Поскольку большинство объектов инициализируется значением nil – исключение как раз и возникает в том месте, где мы обратились к несуществующему объекту, что упрощает задачу.
    Сюда же отнесем и такую распространенную среди новичков ошибку, как неправильный вызов конструктора: SomeObject.Create (правильно SomeObject:= TSomeObject.Create).
    В большинстве таких случаев компилятор сам выдаст предупреждение «Variable XXX might not have been initialized», к которому нужно относиться с должным почтением, особенно если переменная является объектом; хотя иногда бывает, что компилятор волнуется понапрасну.

    2. Вызовы методов объектов, которые не были проинициализированы в результате ошибки
    Многие функции API и некоторые функции VCL возвращают nil в случае, если объект не был по какой-либо причине создан, найден и т.п. Естественно, что попытка обращения к такому объекту вызовет Access violation. Этот случай также легко ловится, а для исправления обычно используют проверку возвращаемого значения, иногда с вызовом более понятного и адекватного исключения.
    Ошибка часто возникает в случае, когда вместо вызова метода Free объекта происходит прямое обращение к деструктору. Такое случается, например, если исключительная ситуация произошла в конструкторе – тогда сразу же после вызова конструктора произойдет вызов деструктора, который может «споткнуться» на одном из вызовов Destroy объекта, до которого не дошла очередь при инициализации.

    3. Вызовы методов объектов, которые были уже уничтожены
    Еще одно место, где возникают ошибки подобного рода – деструкторы (и вызываемые ими обработчики сообщений OnDestroy). Этот случай похож на первый. Для решения проблемы здесь также можно поиграть с порядком создания элементов, так как уничтожаются они строго в обратном порядке. Иногда может помочь флаг csDestroying, расположенный в свойстве ComponentState, который говорит о том, что идет вызов деструктора компонента, а значит – не все операции допустимы.
    Полезное средство для обнаружения этой ошибки (в случае объектов) – вызов функции FreeAndNil(Obj) вместо Free.Obj, поскольку первая не только освобождает объект, но и обнуляет указатель на него. Это предохраняет сразу от двух неприятностей: во-первых, указатель на объект будет обнулен, и вы никак не сможете испортить содержимое памяти других объектов или менеджера памяти; а во-вторых – при попытке обращения к объекту возникнет исключительная ситуация по адресу FFFFFFFF, что облегчит поиск ошибки. Однако FreeAndNil – не панацея от всех бед; ведь могут существовать и другие указатели на наш объект, и обнуление одного не поможет.
    Есть еще одна причина возникновения такой ситуации: некоторые объекты в своих деструкторах автоматически уничтожают другие объекты; и излишнее рвение в таком нужном деле, как уборка мусора, может привести к тому, что вы дважды вызовете чей-то деструктор. Сказанное относится в первую очередь к компонентам: каждый компонент уничтожает все те компоненты, которыми он владеет; поэтому следующий код приведет к ошибке:


    begin
    inherited;
    FInnerObj:= TInnerObj.Create(AOwner); // Будьте осторожны!!!
    { Теперь владельцем FInnerObj является AOwner }
    end;


    begin
    FinnerObj.Free; // Ошибка!!!
    end;

    Что происходит при уничтожении владельца экземпляра TSomeObject? Он владеет как самим этим экземпляром, так и объектом FInnerObj. Поэтому в деструкторе владельца будут освобождены как сам экземпляр TSomeObject, так и FInnerObject, что приведет к двойному уничтожению объекта FInnerObj (один раз в деструкторе его владельца, другой раз в деструкторе TSomeObject). Access violation…

    Варианты решения проблемы такие:

    { Вариант 1 }
    constructor TSomeObject.Create(AOwner: TComponent);
    begin
    inherited;
    FInnerObj:= TInnerObj.Create(Self);
    { Теперь наш компонент является владельцем FInnerObj }
    end;

    Destructor TSomeObject.Destroy;
    begin
    { Объект FInnerObj имеет владельца и уничтожится автоматически }
    end;

    { Вариант 2 }
    constructor TSomeObject.Create(AOwner: TComponent);
    begin
    inherited;
    FInnerObj:= TInnerObj.Create(nil);
    { FInnerObj не имеет владельца}
    end;

    Destructor TSomeObject.Destroy;
    begin
    FinnerObj.Free; // FInnerObj не имеет владельца.
    { Удаляем вручную. }
    end;

    4. Освобождение объектов, которые будут в дальнейшем использованы и освобождены автоматически
    Что называется, не вами и не здесь... Delphi автоматически уничтожает большинство своих объектов. Но даже несмотря на это, обычно уничтожение объекта не приводит к ошибке, так как в деструкторе он сам вычеркнет себя из всех списков, где он фигурировал.
    Однако это верно далеко не всегда; особенно если вы пользуетесь собственной системой классов. И, естественно, если объект будет использован в дальнейшем – тем более нельзя его удалять. Примеры – освобождение класса исключения в секции finally и освобождение объекта Sender при вызове события.
    Локализовать такую ошибку можно так: комментировать вызовы Free (FreeAndNil), и, если при очередном комментировании ошибка исчезла – значит, она жила в закомментированном фрагменте.

    5. Выход за пределы диапазона
    Данная ошибка приводит к исключительной ситуации Range Check Error, но только при включенной опции проверки диапазона {$R+}. Если эта опция выключена (а по умолчанию это именно так) – может произойти запись либо в область памяти, занимаемую другой переменной или классом, либо в свободный фрагмент памяти. Во втором случае возможны варианты – либо этот фрагмент памяти выделен операционной системой, либо не выделен. В последнем случае вам повезло, так как Access violation появится сразу же, и вы будете точно знать место ошибки. А на этапе отладки – лучше включать опцию {$R+}…

    6. Неявное освобождение интерфейсов
    Delphi предоставляет удобные средства для работы с интерфейсами. Но не все интерфейсы требуют автоматического уничтожения при выходе из области видимости. Например, в случае объектов DirectDraw, IBackBuffer будет уничтожен вместе с интерфейсом IPrimarySurface, поэтому вы, следуя документации, разумно его не уничтожаете; но Delphi сделает это за вас, что приведет к ошибке.
    Выходы: либо уничтожать интерфейс непосредственно перед уничтожением его родителя, либо (если это невозможно) просто обнулять его вызовом FillChar(SomeInterface, SizeOf(SomeInterface), 0). Место такой ошибки легко определяется в отладчике.

    7. Передача параметров
    При передаче бестиповых параметров совместимость типов не проверяется, что также может привести к Access violation. Спасти может только обыкновенная внимательность. Самые распространенные ошибки – передача неразыменованых указателей, лишнее использование операции взятия адреса @, и т.д. Например:

    Var
    P: Pointer;
    S: TStream;

    GetMem(P, 100);
    S.Read(S, P); // Ошибка
    S.Read(S, P^); // Правильно

    Еще о передаче параметров: когда вы используете DLL, в объявлении функций, описанных в ней, компилятор всецело полагается на вас. Ошибка в описании функции приведет к тому, что вам не удастся ее вызвать! И не забудьте служебное слово stdcall, так как оно влияет на последовательность передаваемых параметров.

    8. Память, выделяемая в DLL [приложении], освобождается в приложении
    Рассмотрим ситуации, когда память, выделяемая в DLL, освобождается в приложении, и память, выделяемая в приложении, освобождается в DLL. Прежде всего, надо иметь в виду, что модуль System (в котором реализовано управление памятью) будет подключен дважды – один раз в программе, а другой раз в DLL. Соответственно, у вас будет и два менеджера памяти – один в основной программе, другой в DLL. И вполне естественно, что попытка освобождения памяти, принадлежащей другому менеджеру, вызовет недоумение.
    Выход – делать в точности так, как предписывает комментарий, который автоматически вставляется при создании DLL при помощи мастера: подключите первым модулем в проекте как приложения, так и DLL модуль ShareMem. При этом появится новый менеджер памяти, расположенный в Borlndmm.dll. И не забывайте о неявных операциях с памятью, которые осуществляют строки, динамические массивы, классы, и т.п. В некоторых случаях подключать модуль ShareMem не обязательно, но если вы в этом не уверены – лучше перестраховаться.
    Кстати, в Delphi 6 появилась возможность перекомпилировать модуль ShareMem таким образом, чтобы он использовал не встроенный менеджер памяти, а функцию GlobalAlloc. Это отличный способ решить проблему Access violation, если она возникает при связи приложения и DLL, реализованных на разных компиляторах от разных фирм. Но это лишь дополнительное средство, а не решение проблемы.

    9. Операции с указателями
    Тут уж, как говориться, сам бог велел. Если вы реализуете сложный алгоритм, связанный с перемещением указателей и тому подобным – я удивлюсь, если вам удалось ни разу не прописать значение в «левую» область памяти. Но нет худа без добра – значит, вы подготовлены к встрече с Access violation и готовы с ней сражаться – иначе не стоило бы этим делом и заниматься. Отладка программы в этом случае ничем не отличается от отладки любых других алгоритмов, и Access violation становиться здесь рабочим исключением. В силу большой общности вопроса тут сложно дать какие-либо рекомендации.

    10. Отсутствие синхронизации при работе с потоками
    Пожалуй, наиболее неприятное место. Если вы догадываетесь, что у вас складывается именно эта ситуация – примите мои соболезнования. Типичные признаки: в системе несколько потоков, и Access violation возникает в разных местах, даже если вы не вносили изменений в программу. Но прежде чем усиленно медитировать на тему того, какие два (или более) потоков у вас передрались, проделайте вот что:
    1. Удостоверьтесь, что значение переменной IsMultithread – True (глобальная переменная, обеспечивающая безопасное использование динамической памяти). Это важно, если вы создаете поток при помощи CreateThread. Если вы пользуетесь вызовами BeginThread – значение IsMultiThread не критично. Пока один поток управляет памятью, доступ к диспетчеру памяти для другого потока будет заблокирован – до того момента, пока первый поток не освободит диспетчер памяти.
    2. Помните, делать внутренний подсчет ссылок (строки, динамические массивы, интерфейсы и т.д.) при помощи переменных не вполне безопасно. Проанализируйте ваш код на этот предмет.
    3. Если вы используете классы и интерфейсы – проверьте еще раз, что интерфейс поддерживает многопоточные обращения к себе. Часто это не так.
    Что делать, если ничего не помогло

    У Access violation есть типичная и наиболее неприятная особенность: исключение может проявляться не в момент возникновения ошибки, а гораздо позже. Найти именно ту строку, которая приводит к ошибке, бывает непросто. Для этого удобно использовать функцию GetHeapStatus, которая (кроме прочей статистики) даст вам ответ – повреждены ли структуры менеджера памяти (HeapErrorCode). Можете смело считать, что ошибка в программе произошла раньше, чем в HeapErrorCode занеслось ненулевое значение. Вставляйте эту проверку во все критические места программы, и пусть вам повезет!

    «Коли шансы на нуле, ищут злато и в золе…»
    Пусть это будет вашим последним средством, и не стоит прибегать к нему без крайней на то необходимости. В модуле System.pas есть еще пара функций, которые могут быть полезны:

    THeapBlock = record
    Start: Pointer;
    Size: Cardinal;
    end;

    THeapBlockArray = array of THeapBlock;
    TObjectArray = array of TObject;

    Function GetHeapBlocks: THeapBlockArray;
    function FindObjects(AClass: TClass; FindDerived: Boolean): TObjectArray;

    Функция GetHeapBlock возвращает в массиве список всех блоков, выделенных в настоящей момент программой, а функция FindObjects возвращает список всех созданных объектов, которые были порождены от указанного типа. Чтобы воспользоваться этими функциями, надо перекомпилировать модуль System.pas с предопределенным символом DEBUG_FUNCTIONS (в случае Delphi 6; а в случае Delphi 5 – предварительно добавить приведенные выше строки в интерфейсную часть).

    Удачной вам локализации и исправления ошибок!

    Инструкция

    Установите причину появления ошибки 0xc0000005. Она появляется при запуске любой программы в операционной системе Windows, также бывает вариант полного падения системы с данной ошибкой. Самые распространенные , вызывающие появление ошибки 0xc0000005 – ошибки реестра, неисправность памяти либо других устройств, вирусы, некорректные драйвера. Другие варианты появления сообщений об ошибке: «Ошибка при инициализации приложения», Exception: access violation (0xC0000005). Данный код говорит о неверном обращении к памяти, возникающем по разным причинам. Следующие шаги помогут устранить появление ошибки memory access violation.

    Выполните чистку реестра. Ошибки могут в нем скапливаться по мере того, как приложения и закрываются, меняются их настройки, программы удаляются и устанавливаются, особенно если они удаляются некорректным образом, либо более новые программы ставятся поверх старых. Чтобы устранить данные ошибки используйте специальные программы для чистки реестра, например, CCleaner. Скачать программу можно с официального сайта http://www.piriform.com/ccleaner .

    Установите самую новую версию надежной антивирусной программы и проведите полную проверку системы. К примеру, можно скачать лечащую утилиту CureIt! от DrWeb и с ее помощью проверить систему на наличие вирусов, чтобы избавиться от ошибки access violation.

    Убедитесь, что память, установленная , совместима с ним и ее размер не превышает допустимого лимита. Если все правильно, попробуйте убрать новую планку памяти и если ошибка больше не появляется, значит причина в ней. Протестируйте память, чтобы быть уверенными, с использованием программы MemTest86. Если будут найдены ошибки, значит память необходимо заменить.

    Проверьте, не отмечено ли в функции Windows «Предотвращение выполнения данных» приложение, при запуске которого возникает ошибка. Данная функция используется для дополнительных проверок памяти, чтобы предотвратить вредоносный код. Добавьте программы из ПВД, чтобы убрать появление ошибки access violation.

    Источники:

    • memory access violation

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


    1. Если ошибка появляется каждый раз после установки приложения, то есть без ошибки оно ни разу не запускалось, то причиной может быть некорректная установка приложения, или же его несовместимость с вашей системой. Попробуйте полностью деинсталлировать приложение и вновь его . Если ошибка по-прежнему появляется, попробуйте запустить приложение в режиме . Для этого щелкните по ярлыку запуска приложения правой кнопкой мыши и откройте «Свойства». Перейдите на вкладку «Совместимость». Установите флажок «Запускать в режиме совместимости» и выберите Windows, с которой программный продукт гарантированно совместим. Если вы не знаете, какой должна быть , просто пробуйте каждую последовательно, каждый раз нажимая «Ок» или «Применить» и пробуя запустить приложение с помощью этого ярлыка, пока ошибка не будет устранена.

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

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

    4. Проведите полное сканирование системы на вирусы. Возможно, причина ошибки - активность вредоносного программного обеспечения, занесенного на ваш компьютер.

    5. Причиной ошибки может быть физический перегрев модулей памяти, что приводит к их некорректной работе. В этом случае чтобы исправить приложения выключите компьютер, откройте корпус и аккуратно пропылесосьте все электронные компоненты. Кроме того, можно аккуратно извлечь модули памяти и вновь установить их в соответствующие разъемы - это поможет удалить образовавшийся слой окислов на контактах модулей и электропроводимость соединений.

    Ошибка BSoD или «Синий экран смерти» может появиться у каждого пользователя на любом компьютере. В такой ситуации главное не паниковать и следовать четкому алгоритму действий. Вероятнее всего, исправить ее достаточно легко.

    Вам понадобится

    • диск восстановления системы.

    Инструкция

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

    Если вы не знаете предназначение этих файлов, то запустите программу восстановления системы. Откройте панель управления и перейдите к меню «Система и безопасность». Выберите меню «Архивация и восстановление» и перейдите к пункту «Восстановить системные параметры или компьютер».

    Нажмите кнопку «Запуск восстановления системы», выберите одну из ранее созданных контрольных точек и нажмите кнопку «Далее». Перезагрузите компьютер после завершения процесса восстановления.

    Видео по теме

    Обратите внимание

    Восстановить систему можно без доступа к ней. Для этого вам понадобится диск, с которого вы устанавливали OC.

    Источники:

    • синий экран исправление

    Для поиска и устранения причин возникновения проблем, выражающихся в появлении сообщений об ошибках, потребуется запуск Windows Vista или Windows 7 с использованием минимального набора драйверов и автоматически загружаемых программ, именуемый «чистым запуском».

    Инструкция

    Нажмите кнопку «Пуск» для вызова главного меню системы и введите значение msconfig.exe в поле строки поиска для запуска программы настройки системы.

    Нажмите клавишу Enter для подтверждения выполнения команды и введите пароль администратора компьютера (при необходимости) для подтверждения своих полномочий.

    Примените флажок на поле «Выборочный запуск» на вкладке «Общие» открывшегося окна «Конфигурация системы» и снимите флажок на поле «Загружать элементы автозагрузки».

    Перейдите на вкладку «Службы» и примените флажок на поле «Не отображать службы Microsoft».

    Нажмите кнопку «Отключить все» и подтвердите свой выбор нажатием кнопки OK.

    Повторите все вышеописанные действия для возврата к вкладке «Служба» и примените флажок на поле «Не отображать службы Microsoft».

    Примените флажки у половины служб в списке «Службы» и нажмите кнопку OK для подтверждения своего выбора.

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

    Выполните чистый запуск и перейдите на вкладку «Автозагрузка».

    Примените флажки на полях половины элементов списка «Элемент автозагрузки» и нажмите кнопку OK для подтверждения своего выбора.

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

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

    Запустите программу восстановления системы и снимите флажок на поле проблемного элемента после ее завершения.

    Нажмите клавишу Enter для выполнения команды и перейдите на вкладку «Общие» открывшегося диалогового окна.

    Выберите параметр «Обычный запуск» и нажмите кнопку OK для выполнения команды.

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

    Видео по теме

    Обратите внимание

    Неприменение флажка на поле «Не отображать службы Microsoft» может привести к окончательному удалению всех точек восстановления системы!

    Некоторые игроки в Minecraft могут столкнуться с ошибкой EXCEPTION_ACCESS_VIOLATION 0xc0000005 при запуске игры. В сообщении к ошибке вы можете найти информацию о том, что во время попытки запустить игру средой выполнения Java был обнаружен критический сбой.

    Соответственно, обойти данную ошибку и зайти в Minecraft вам не удастся, пока вы не ликвидируйте причину этого критического сбоя. В этой статье мы попытаемся помочь вам исправить ошибку EXCEPTION_ACCESS_VIOLATION 0xc0000005, чтобы вы смогли запустить Minecraft и наслаждаться игрой.

    Исправляем ошибку EXCEPTION_ACCESS_VIOLATION 0xc0000005 при запуске Minecraft

    Переустановка Java

    Первым делом, вам необходимо попробовать выполнить переустановку компонентов Java на вашем компьютере. Возможно, что последняя их установка прошла не так успешно, как вы думали. Делается переустановка довольно просто: зайдите в «Программы и компоненты», найдите там пункт Java, нажмите правой кнопкой мыши на него и выберите «Удалить».

    Затем пройдите на официальный сайт Java, загрузите установщик библиотек программного обеспечения, установите их и выполните перезагрузку своего компьютера. После этих нехитрых действий снова попробуйте запустить Minecraft и проверьте наличие ошибки EXCEPTION_ACCESS_VIOLATION 0xc0000005.

    Переустановка Minecraft

    Если переустановка компонентов Java не помогла разрешить ситуацию с ошибкой при запуске Minecraft, то почему бы не попробовать переустановить саму игру. Учитывая, что размер той невероятно мал, то это не должно составить для вас проблем.

    Снова пройдите в «Программы и компоненты». Найдите в списке установленных программ установленный Minecraft. Нажмите на него правой кнопкой мыши и выберите «Удалить». Затем проведите повторную установку игры, как вы делали это в первый раз.

    Отключение Контроля учетных записей

    Есть вероятность, что ошибка EXCEPTION_ACCESS_VIOLATION 0xc0000005 при запуске Minecraft могла возникнуть из-за конфликта с Контролем учетных записей в вашей операционной системе Windows. Чтобы проверить данную вероятность, вам нужно отключить Контроль учетных записей, а затем снова попробовать запустить Minecraft. Для этого сделайте следующее:

    • Нажмите комбинацию клавиш Windows+S .
    • Введите в поисковую строку запрос «Изменение параметров Контроля учетных записей» и выберите найденный результат.
    • Перед вами должен появиться ползунок, отвечающий за уведомления Контроля учетных записей. Передвиньте его на положение «Никогда не уведомлять».
    • Примените изменения.

    Снова попытайтесь запустить Minecraft, чтобы проверить наличие ошибки EXCEPTION_ACCESS_VIOLATION 0xc0000005. Если не помогло, то давайте двигаться дальше.

    Проверка конфликтов игры с DEP

    DEP(Data Execution Prevention или Предотвращение выполнения данных) — это программное и аппаратное обеспечение системы, которое не дает производить на ней запуск вредоносного кода. Файлы Minecraft могли войти в конфликт с этим обеспечением, вследствие чего были заблокированы для выполнения. Вам нужно внести файлы игры в список исключения DEP. Для этого сделайте следующее:

    • Нажмите комбинацию клавиш Windows+S.
    • Введите в поисковую строку запрос «Сведения о системе» и выберите результат.
    • Нажмите на пункт «Дополнительные параметры системы».
    • Перейдите во вкладку «Дополнительно».
    • Пройдите в «Параметры» раздела «Быстродействие».
    • Перейдите во вкладку «Предотвращение выполнения данных».
    • Поставьте галочку возле параметра «Включить DEP для всех программ и служб, кроме выбранных ниже:».
    • Далее нажмите на кнопку «Добавить».
    • Добавьте в исключения DEP исполнительный файл Minecraft. Если вы устанавливали игру в директорию по умолчанию, то она должна будет находиться в
    • Сохраните изменения в работе DEP.

    Как только вы исключили Minecraft из DEP, попробуйте снова его запустить. Если ничего из вышеуказанного не помогло вам в решении ошибки EXCEPTION_ACCESS_VIOLATION 0xc0000005, то у нас остался еще один, последний метод, который, по заявлению многих пользователей в сети, уж точно исправит проблему.

    Изменение файла Options

    Итак, перейдите в папку с Minecraft, которая должна находиться в директории C:\Users\UserName\AppData\Local\.Minecraft. Найдите в этой папке файл под названием options.txt . Откройте его и найдите в нем строчку fnoEnable: true.

    Вы должны изменить значение этой строчки с fnoEnable:true на fnoEnable:false . Затем сохраните изменения в этом файле и спокойно продолжайте играть в Minecraft, так как на этот раз ошибки EXCEPTION_ACCESS_VIOLATION 0xc0000005 быть не должно.

    Нашли опечатку? Выделите текст и нажмите Ctrl + Enter