[РЕШЕНО] Обращение к исключению за пределами Try Except

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

[РЕШЕНО] Обращение к исключению за пределами Try Except

Сообщение Brainenjii »

Пишу код:

Код: Выделить всё


program Project1;
uses
  sysutils;
Var
  aException: Exception;
begin
  aException := nil;
  Try
    Raise Exception.Create('Hello world');
  Except On E: Exception Do
    Begin
      aException := E;
      WriteLn('Message: ', aException.Message);
    End;
  End;
  WriteLn('Message: ', aException.Message);
end.

Возвращает:
~> /tmp/project1
Message: Hello world
Message:


Вопрос: куда пропадает Message? ^_^
Последний раз редактировалось Brainenjii 27.09.2011 14:55:00, всего редактировалось 2 раза.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Объект исключения уничтожается при выходе из блока except. Если таки хочется его использовать после, то надо внутри блока except вызывать AcquireExceptionObject, а после пользования - Free.
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Спасибо.
Но почему не поднимается Access Violation при обращении к уничтоженному объекту?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Менеджер памяти не отдает освобожденную память системе сразу же (в предположении, что она снова понадобится кому-то еще), поэтому память остается доступной.
Ответить