Тарифы Услуги Сим-карты

Access violation at address что делать

Добрый день уважаемые читатели блога, сегодня я хочу рассказать как лечиться глюк, когда Skype виснет и выдает ошибку access violation at address 67155B8E in module mshtml.dll. Read of address 00000008. С такой проблемой я столкнулся в Windows 10 redstone, но она актуальна и на предыдущие редакции операционной системы.

Виснет skype в Windows 10

И так у меня есть skype для рабочего стола , работал он себе так хорошо, вплоть до обновления 7.24, после которого виснет skype и глючит просто не реально. Периодами в момент краха он выдает ошибку

access violation at address 67155B8E in module mshtml.dll. Read of address 00000008

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

На данный момент версия 7.24 самая последняя, так что обновлять не на что, может они это сразу потом пофиксят, а сейчас танцы с бубнами 🙂 .

Как видите глючит skype из за библиотеки mshtml.dll, давайте разберемся, чья она и за что отвечает.

Модуль mshtml dll

Модуль mshtml dll это библиотека интернет-браузера Internet Explorer. Первым делом, произведите сброс настроек Enternet Explorer , как это сделать описано по ссылке. После сброса перезагрузите компьютер, запустите скайп и проверьте есть ли проблемы с зависанием или глюками, если да то движемся дальше.

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

Удалите skype, через программы и компоненты или можете воспользоваться ccleaner для удаления программ, после чего им же почистите реестр , перезагрузитесь. Еще советую почистить windows от мусора , бесплатной утилитой privazer. После очистки устанавливаем skype для рабочего стола Windows 10 , данный процесс я описывал смотрите по ссылке слева. Если данный метод не помог, то идем дальше.

Откат на предыдущие версии

Логично, что если у вас до обновления проблем не было, то видимо старая версия в конфигурации вашей операционной системы вела себя корректно и без зависания с глюками и логично, что правильно было бы ее установить. Ищем ее на сайте skype.com и пробуем установить. Если глюки не пропадают, то идем дальше по чек листу.

Установка обновлений Windows 10

Да видел, что данную проблему удавалось исправить установкой обновлений на Windows из центра обновлений. Возможно у вас происходит крах программы из за отсутствия критичного обновления. Как установить обновления в Windows 10 , можете так же посмотреть кто не знает.

Осторожно вирус

Если вам кто то предлагает для решения проблемы с зависанием skype установить утилиту SkypePcFreezeFix.exe то ни в коем случае этого не делайте, там вирус

Как видите Dr. Web и Baidu нашли в нем вирусный троян.

Отключение рекламы skype

Тоже действенный метод, выручающий в некоторых случаях, это отключение рекламы в скайпе, через файл hosts, который лежит по пути.

C:\Windows\System32\drivers\etc\hosts

127.0.0.1 rad.msn.com
127.0.0.1 preview.msn.com

и перезагрузил скайп.

Подмена библиотеки mshtml.dll

В skype mshtml.dll, тоже каким то боком участвует и если вдруг она повреждена, то попробуйте ее скачать с другого компьютера под управлением нужной операционной системы, находится она по адресу C:\Windows\System32

Надеюсь вам помогла данная статья решить ошибку в skype access violation at address 67155B8E in module mshtml.dll. Read of address 00000008 и он перестал у вас вылетать и глючить.

Ничто не может раздражать геймера больше, чем разнообразные ошибки, которые могут сопровождать определенные игры. Причем у каждой из ошибок есть свои причины и способы решения, и иногда приходится тратить очень много времени на то, чтобы сначала отыскать, из-за чего появилась ошибка, а затем и на то, чтобы найти действенные способы решения проблемы. Одной из самых нелюбимых ошибок геймеров является 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.

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

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

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

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

Каждый, кто знаком с ОС Windows знает, что невозможно пользоваться компьютером, не столкнувшись с ошибками и проблемами. Многие из них можно решить обычной перезагрузкой системы. Но встречаются и такие, при которых невозможно продолжить работу. Одной из таких ошибок является Access violation at address … in module. Читайте далее, как её исправить.

Причины появления ошибки Access violation at address … in module

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

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

Как избавиться от ошибки обращения к памяти

Ошибка появляется при попытке выключить компьютер, перезагрузить его или поменять свой профиль. Но часто так и не удается это сделать из-за системного сообщения. Приходится либо выключить устройство из розетки, либо выключать его долгим нажатием кнопки питания Power . Перед тем, как устранять ошибку Access violation at address … in module, проверьте хранилище вирусов вашего антивирусного программного обеспечения. Возможно некоторые файлы, к которым вы пытались обратиться, были помещены сюда. Такие данные для системы будут уже не доступны.

  1. Чтобы это сделать, найдите значок на панели задач (трее) в виде стрелочки, нажмите её и появятся скрыты значки.
  2. Здесь выберите значок антивируса ПКМ.
  3. В контекстном меню обычно находится пункт «Карантин».

Карантин антивируса в трее

Выберите его и проверьте содержимое. Если найдете там файлы программ, которым вы доверяете - удалите их из карантина. Если ошибка Access violation at address продолжается, необходимо переустановить данную программу и внести в антивирусе в список доверенных.

После этого попробуйте перезапустить компьютер и войти в ОС через последнюю удачную конфигурацию.

  1. Для этого при появления начального экрана нажмите клавишу F8 и не отпускайте до тех пор, пока не появится окно с несколькими способами запуска.
  2. Выберите «Запуск последней удачной конфигурации».
  3. В этом случае будет использована система с конфигурацией драйверов и реестра, которые работали до этого стабильно.

Выбор последней удачной конфигурации в Windows

Проверка запуска оболочки Windows

Следующим шагом в исправлении ошибки Access violation at address … in module будет проверка запуска оболочки операционной системы.

  1. Откройте окно ввода команд - WIN+R.
  2. Введите следующую команду «Regedit» и подтвердите, нажав Enter.
  3. Откроются ветки, здесь выберите HKEY_LOCAL_MACHINE.
  4. Далее найдите ниже SOFTWARE.
  5. Здесь отыщите ветку Microsoft, ниже выберите Windows NT и CurrentVersion.
  6. И наконец выберите Winlogon.

Когда вы откроете последнюю ветку в правой части появится окно со списком ключей и параметров, найдите здесь Shell. Его необходимо открыть как обычную папку, дважды нажав мышью. В исправной системе здесь должно быть значение Explorer.exe. Если у вас стоит иное - исправьте его и сохраните изменение. Точно так же нужно проверить ключ Userinit. Здесь по умолчанию установлено C:\windows\system32\userinit.exe. Если здесь указано что-то другое - исправьте. Далее выйдите из редактора и закройте все окна. Перезагрузите компьютер и проверьте, появляется ли ошибка.

Чистка системного реестра Windows

В некоторых случаях при ошибке Ошибка Access violation at address in module помогает очистка системного реестра.

  1. Для этого вполне сгодится программ CCleaner, которую можно скачать по ссылке https://www.ccleaner.com/ru-ru.
  2. Загрузите и установите её.
  3. Откройте и выберите слева «Реестр».
  4. Нужно активировать внизу «Анализ», далее появится кнопка «Очистить».

Чистка реестра программой CCleaner

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

Другие методы решения ошибки «Access violation at address …»

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


Будет произведена проверка файлов на жестком диске. Эта команда сканирует файловую систему жесткого диска и, если находит сбои в системных файлах автоматически исправляет их. Компьютер будет перегружен в процессе. Если этот способ снова не помог вам устранить проблему «Access violation at address … in module», попытайтесь вернуть рабочую систему при помощи точек сохранения.


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


Восстановление или переустановка системы

Если ни один из методов вам не помог решить эту ошибку, попробуйте сделать восстановление с участием диска Windows.

  1. Для этого вставьте в привод диск и перезагрузите компьютер.
  2. Войдите в настройки подсистемы BIOS и выберите загрузку с дисковода.
  3. Перезагрузите компьютер и активируйте загрузку с оптического диска.
  4. После того, как будут установлены временные файлы, вы увидите окно, где предлагается переустановить систему с несколькими вариантами. Выберите «Восстановление системы».
  5. Далее найдите необходимое восстановление и нажмите «Готово».

Когда будет выполнено восстановление, проверьте наличие ошибки на компьютере. В том случае, если она снова возникает, придется переустановить Windows. Это можно сделать, не затрагивая файловый раздел жесткого диска. Это значит, что вы можете переустановить только систему на диске C:\, а другие диски, где обычно хранятся файлы пользователя не трогать. После переустановки системы вы точно избавитесь от ошибки Access violation at address … in module.

Вконтакте

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

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

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 – предварительно добавить приведенные выше строки в интерфейсную часть).

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