Moin.
Ich stell mich gerade zu blöd an, finde aber den Fehler nicht:
Ich versuche gerade, mir von einer Prozedur einen Zeiger auf ein in der Prozedur erzeugtes Objekt zurückgeben zu lassen.
Offenbar zeigt der Zeiger unmittelbar nach Rückkehr auf das Objekt mit dem richtigen Inhalt (1234).
Sobald dann ein neues Objekt (egal was) erzeugt wird, wird offenbar mein in der Prozedur erzeugtes Objekt überschrieben.
Die Freigabe des Objekts endet sogar in einer Schutzverletzung, offenbar wurde das Ding schon freigegeben. Aber durch wen und wieso?
Hat jemand eine Idee?
PS: Als erste Zeile steht "Delphi-Version: 5". Hab ich nicht geschrieben, steht auch nicht in meinem Profil, glaube ich... Keine Ahnung wie das dahin kommt.
Delphi-Quellcode:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls;
type
TMyClass =
class
public
Wert: integer;
end;
PMyClass = ^TMyClass;
TForm1 =
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Test(
var Zeiger: PMyClass);
var
MyObject: TMyClass;
begin
MyObject := TMyClass.Create;
MyObject.Wert := 1234;
Zeiger := @MyObject;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
pObjekt: PMyClass;
AnderesObjekt: TMyClass;
begin
Test(pObjekt);
Caption := pObjekt^.Wert.ToString;
// OK, 1234
AnderesObjekt := TMyClass.Create;
AnderesObjekt.Wert := 9876;
Caption := pObjekt^.Wert.ToString;
// Nun nicht mehr 1234...
AnderesObjekt.Free;
pObjekt^.Free;
// AV
end;
end.