Паскаль: вызов пустого метода в классе приводит к ошибкам

У меня очень крутой класс.

unit StuffClass;

{$mode objfpc}{$H+}

interface

type
  TStuffClass = class
    public
      procedure Update;
  end;

implementation

procedure TStuffClass.Update;
begin

end;

end.

Создание его экземпляра и вызов его процедуры Update приводит к тому, что программа выдает SIGSEGV..

Что за..? Это абсолютно ничего не делает.

Я использую 32-битную версию Freepascal (и Lazarus).

Почему это происходит?

РЕДАКТИРОВАТЬ: Вот вызывающий бит:

//Creating it
constructor TEngine.Create(TV: pSDL_Surface);
begin
  Self.TV := TV;
  Self.StuffClass.Create;
end;

function TEngine.Update: Boolean;
begin
  WriteLN('Test');
  SDL_PumpEvents;

  Self.StuffClass.Update; //Crashes here.
  Update := True;
end;

person Name McChange    schedule 12.04.2013    source источник


Ответы (1)


Вы создаете это неправильно.

Вам нужно сохранить возвращенный экземпляр объекта в переменную, а затем вместо этого использовать эту переменную (ссылку):

constructor TEngine.Create(TV: pSDL_Surface);
begin
  Self.TV := TV;
  Self.StuffClass := TStuffClass.Create;
end;

Теперь остальная часть вашего кода может использовать его:

procedure TEngine.SomeOtherProcedure;
begin
  Self.StuffClass.Update;
end;
person Ken White    schedule 12.04.2013
comment
Собственно, я так и делаю. StuffClass является закрытым членом другого класса с именем Engine. - person Name McChange; 12.04.2013
comment
Тогда не заставляйте нас пытаться угадать, что вы делаете не так. Опубликуйте фактический код, демонстрирующий проблемное поведение. Определение класса без демонстрации того, как вы его используете, что вызывает ошибку, бессмысленно. - person Ken White; 12.04.2013
comment
Просто показал, что был прав в своем предположении. :-) Я отредактировал свой ответ, чтобы показать, используя ваш фактический код. Спасибо за редактирование. :-) - person Ken White; 12.04.2013
comment
Эй, спасибо. Какая глупая ошибка с моей стороны. (Вы также тот парень, который ранее отвечал на мои глупые вопросы по Паскалю, так что спасибо и за это!) - person Name McChange; 12.04.2013