Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Почему возникает ошибка Access Violation

Delphi , Синтаксис , Ошибки и Исключения

Почему возникает ошибка Access Violation

Автор: Vit
WEB-сайт: http://forum.vingrad.ru

Ошибка "Access Violation" возникает, когда идёт обращение к памяти к которой обращение запрещено. Это возможно во многих случаях, но наиболее типичные ситуации я попытаюсь перечислить:

1) Обращение к не созданному объекту.

var
  e: TEdit;
begin
  e.text := 'Hello world!';
end;

В данном случае объект e ещё не создан и идёт обращение к памяти, которая ещё не выделена.

2) Обращение к уже разрушенному объекту:

var
  e: TEdit;
begin
  ...
  e.free;
  ...
  e.text := 'Hello world';
end;

Тут есть хитрость, допустим вы хотите проверить есть ли объект и модернизируете код:

if e <> nil then
  e.text := 'Hello world!';

или

if assigned(e) then
  e.text := 'Hello world!';

Особенно часто приходится такое делать когда надо уничтожить объект:

if e <> nil then
  e.free;

Так вот - такой код может быть источником ошибки, так как метод Free автоматически не устанавливает указатель в Nil. Обязательно после каждого Free используйте установление указателя в nil:

e.free; 
e := nil; 

3) При выходе за границы динамического массива обычно генерится ошибка "Index out of bound", но возможно и возникновение Access Violation, особенно когда не стоят опции компилляции по проверки границ массивов. Эта ошибка может быть очень сложна в отлаживании - дело в том что допустим у вас есть массив а длиной в 10 элементов, в пишете:

a[20] := something; 

И эта строка может пройти как и надо, без всяких проблем, но её выполнение повредит какой-то другой код, причём каждый раз другой! Теперь самая безобидная операция типа i:=10 может вдруг внезапно дать Access Violation.

3) На форме на onCreate вызывается что-то с других форм - эти другие формы на этот момент еще не созданы

4) На форме на onDestroy вызывается что-то с других форм - эти другие формы на этот момент уже разрушены

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Ошибки и Исключения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-22 07:35:37/0.0033040046691895/0