Что такое access violation?

Некоторые программы "ложатся" и выдают при этом сообщение, начинающееся со слов "Access violation". Что это такое вообще?

Из письма читателя

Рано или поздно каждый пользователь оказывается в ситуации, когда программа "слетает". Уверен, что это знакомо всем читателям "Компьютерных вестей". Ситуация, когда приложение после "слетания" выдает сообщение об ошибке типа access violation, является весьма распространенной, а потому имеет смысл поговорить о ней в нашей традиционной рубрике FAQ.

"Access violation" в переводе с английского языка означает "нарушение доступа". Сразу же возникает закономерный вопрос: какой доступ и кто его нарушает? Дело в том, что любая программа использует для своей работы память (речь идет об оперативной памяти, а не о запоминающих устройствах), что вполне логично и закономерно. Памяти на всех не хватает, и в системе она распределяется динамически - когда приложению нужно больше памяти, оно запрашивает её у операционной системы. Если же, напротив, в какой-то момент времени памяти нужно меньше, чем приложению было выделено операционной системой, то оно должно "поделиться" излишками, то есть освободить не нужную ему больше память, которая после этого может быть выделена другим приложениям.

Собственно, именно с динамическим распределением памяти и связаны ошибки нарушения доступа. Дело в том, что довольно часто возникает ситуация, когда приложение "забывает" о том, что оно уже освободило какую-либо область памяти, и пытается прочитать из неё или записать в неё какие-либо данные. Такие действия вызывают вполне закономерный протест со стороны операционной системы, поскольку она знает, что в эту область этому приложению данные писать никак нельзя и считывать из неё тоже. Именно тогда на экране вы видите сообщение об ошибке нарушения доступа. Справедливости ради стоит отметить, что далеко не всегда появление этой ошибки приводит к аварийному завершению работы приложения.

Современные технологии разработки программного обеспечения вполне успешно преодолели данную ошибку. Она решается путем автоматического слежения за состоянием памяти средой выполнения программы - теперь освобождение памяти после её использования ложится не на программиста, создающего программный код, а на среду, в которой программа выполняется (т.н. "сборка мусора"). Впрочем, в силу того, что для некоторых распространенных языков создания приложений для Windows (C/C++, Delphi) такой способ решения проблемы неприменим, все новые и новые приложения продолжают "радовать" нас ошибками "Access violation".

У вас есть вопрос? Присылайте его на [email protected], и мы рассмотрим его вместе на страницах "Компьютерных вестей"!

Вадим СТАНКЕВИЧ

Версия для печатиВерсия для печати

Номер: 

02 за 2010 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!