Почему вылазит AV?

sann-x
Дата: 18.05.2011 12:19:34
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    if Byte(nil^) = 0 then;
  finally
  end;
end;
При запуске без отладчика вылазит AV. Пробовал этот код в Д6 и Д2007 - одинаково. Почему вылазит AV?
Мимопроходящий
Дата: 18.05.2011 12:22:28

Hello, sann-x!
You wrote on 18 мая 2011 г. 9:19:34:

sann-x
Почему вылазит AV?
а что должно быть?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

softmaker
Дата: 18.05.2011 12:22:57
А nil^ - это где??? 8-)
sann-x
Дата: 18.05.2011 12:23:15
Мимопроходящий
а что должно быть?

Ничего не должно быть.
softmaker
Дата: 18.05.2011 12:23:30
Может всё-таки byte(nil)=0 ?
Anatoly Podgoretsky
Дата: 18.05.2011 12:25:11
Потому что этот адрес запрещен для тебя, а ты пытаешься нарушить (violate)
Maxim Rusov
Дата: 18.05.2011 12:27:48
Ты, наверное, хотел написать:

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    if Byte(nil^) = 0 then;
  except
  end;
end;
softmaker
Дата: 18.05.2011 12:28:53
А зачем???
Можно просто без try except/finally end;
if obj = nil then // тут сделать что надо
FlyD
Дата: 18.05.2011 13:05:13
sann-x
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    if Byte(nil^) = 0 then;
  finally
  end;
end;
При запуске без отладчика вылазит AV. Пробовал этот код в Д6 и Д2007 - одинаково. Почему вылазит AV?
блок try/finally НЕ гасит исключение
defecator
Дата: 18.05.2011 13:10:45
sann-x
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    if Byte(nil^) = 0 then;
  finally
  end;
end;
При запуске без отладчика вылазит AV. Пробовал этот код в Д6 и Д2007 - одинаково. Почему вылазит AV?


Значение NIL соответствует нулевому адресу, который в компиляторе Delphi трактуется как защитный.
Соответственно, обращение по нему приводит к AV.