Показать сообщение отдельно
  #5  
Старый 12.04.2017, 21:10
MProg MProg вне форума
Прохожий
 
Регистрация: 12.04.2017
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Можно еще добавить вот так чтоб была более наглядно проилюстрированна суть извращения:

Код:
procedure TMButton.MyFree;
begin
  FreeAndNil(MB);
  MB.I:=0;
end;

procedure TMButton.Click;
begin
  inherited;
  MyFree();
end;


Тойсть ошибка происходить из-за того что идет обращение к объекту или его частям после того как он был удален...

Вопрос в том как излюбнуть систему чтоб управление после FreeAndNil(MB); переходило в какую-то часть программы и дальше все работало в штатном режиме как будто объекта MB и не бывало?

Для людей не насилующих свой мозг:
Удаление MB.I:=0; не решит проблему.. Так как "end" грубо говоря превращается в ассемблерный "ret" который вытаскивает адрес (удаленного объекта) из стека процесора и пытается с ним взаимодействовать


Решение которое мне приходит на ум то это какие-то махинации со стеком или "jmp" в какой-то участок кода, или вообще все вместе...
Но это пока еще вопрос как и не нарушу ли я этим какую-то священную логику самого самого Delphi
Ответить с цитированием