Почему возникает ошибка Access ViolationDelphi , Синтаксис , Ошибки и ИсключенияПочему возникает ошибка Access Violation
Автор: Vit Ошибка "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" возникает, когда программированный код пытается обратиться к памяти, которая запрещена или не существует. Комментарии и вопросы:: 2012-04-14 14:45:48 :: re:Почему возникает ошибка Access Violationпользователь: blablabla. У меня раньше этой ошибки не было, а сейчас выскакивает, даже если я только что создал проэкт и ничего в нем не делал (форма без кнопок и прочего...). Причем программы корректно компилируются и выполняются (при запуске exe файла) без всяких ошибок. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Ошибки и Исключения ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |