Autor Beitrag
KidPaddle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 351

WinXP,Linux
D7 Prof, XE7
BeitragVerfasst: Mo 03.01.05 21:27 
Hallo,

ich habe folgenden Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
  IExchangeData = interface
    procedure LoadFromXML(aData : String);
    function  SaveToXML : String;
  end;

  TExchangeFrame = class(TFrame, IExchangeData)
  public
    procedure LoadFromXML(aData : String);
    function  SaveToXML : String;
  end;

Ich erstelle das Objekt TExchangeFrame und es wird auch korrekt angezeigt und der Datenaustausch funktioniert problemlos. Das Objekt wird wie folgt erstellt:

ausblenden Delphi-Quelltext
1:
2:
3:
Frame := TExchangeFrame.Create(Self);
Frame.Parent := tsOptions;
Frame.Align  := alClient;

Nur wenn ich das erstelltes Objekt mit FreeAndNil() freigeben will, dann wird Speicherfehler ausgelöst.

Hat jemand ein Tip für mich, wodurch dieser Speicherfehler ausgelöst wird?

Gruß
KidPaddle

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
Maweki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 197

Ubuntu Linux
Lazarus
BeitragVerfasst: Mo 03.01.05 22:00 
wird es vielleicht schon mit dem yerstoeren oder freigeben vom Parant mit freigegeben?
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 03.01.05 23:02 
Hi!

Ich vermute mal, daß du zum Zeitpunkt des Freigebens noch Interfaces auf das Objekt hast. Ein durch Interfaces angesprochenes Objekt sollte sich selbst durch die interne Referenzzählung (siehe Implementation der Routine _Release) freigeben, um Fehler wie "Ungültige Zeigeroperation", die beim Nilsetzen beziehungsweise beim Out-Of-Scope gehen von Interface-Variablen auftreten, zu vermeiden.
Ansonsten mußt du eben sicherstellen, daß bei Freigabekeine Referenzen mehr bestehen.

Cu,
Udontknow
KidPaddle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 351

WinXP,Linux
D7 Prof, XE7
BeitragVerfasst: Di 04.01.05 11:35 
Hi Udontknow,

ich reserviere das Objekt nur ein einziges mal und gebe dieses auch nur einmal frei. Wie kann ich feststellen, ob noch Referenzen auf das Objekt existieren?

Gruß
KidPaddle