Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delphi: Access Violation at the end of Create() constructor

I have a very basic and simple class like this:

unit Loader;

interface

uses
  Vcl.Dialogs;

type
  TLoader = Class(TObject)
  published
      constructor Create();
  end;

implementation

{ TLoader }    
constructor TLoader.Create;
begin
   ShowMessage('ok');

end;

end.

And from Form1 i call it like this:

procedure TForm1.Button1Click(Sender: TObject);
var
 the : TLoader;
begin
  the := the.Create;
end;

Now, just after the the := the.Create part, delphi shows the message with 'ok' and then gives me an error and says Project Project1.exe raised exception class $C0000005 with message 'access violation at 0x0040559d: read of address 0xffffffe4'.

Also it shows this line:

constructor TLoader.Create;
begin
   ShowMessage('ok');

end; // <-------- THIS LINE IS MARKED AFTER THE ERROR.

I am new at delphi. I am using Delphi XE2 and i couldnt manage to fix this error. Does anyone show me a path or have solution for this?

like image 798
xangr Avatar asked Aug 30 '12 18:08

xangr


2 Answers

var
  the : TLoader;
begin
  the := the.Create;

is incorrect. It should be

var
  the : TLoader;
begin
  the := TLoader.Create;
like image 61
Andreas Rejbrand Avatar answered Nov 16 '22 04:11

Andreas Rejbrand


You've got the syntax wrong. If you're constructing a new object, you should use the class name, not the variable name, in the constructor call:

procedure TForm1.Button1Click(Sender: TObject);
var
 the : TLoader;
begin
  the := TLoader.Create;
end;
like image 20
Mason Wheeler Avatar answered Nov 16 '22 04:11

Mason Wheeler