AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei TStringlist Freigabe

Ein Thema von Master of the Wind · begonnen am 20. Dez 2005 · letzter Beitrag vom 23. Dez 2005
Antwort Antwort
Seite 1 von 3  1 23      
Master of the Wind

Registriert seit: 20. Dez 2005
26 Beiträge
 
#1

Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 15:57
Hallo erstmal...
Also ich habe ein inzwischen doch umfangreiches Programm geschrieben, weswegen die Fehlersuche noch etwas schwerer wird. Für euch wahrscheinlich auch. Naja ..Also ich hab ein Problem mit dem Freigeben. Zum Aufbau: Ich ein Grundobjekt. In dem kommen wieder Instanzen von anderen objekten vor und in denen nun eine TStringlist. So ich hab nun zu jedem Objekt eine Methode geschrieben, die die (noch manuell) die zuerst mit create erstellten Objekte wieder frei gibt. Das geht auch so weit, nur bei einer Stringlist nicht. dazu mal ein Beispiel

Delphi-Quellcode:
TObjekt1=class(TComponent)
Stringlist1:TStringlist;
Stringlist2:TStringlist;
Stringlist3:TStringlist;
public
procedure init;
procedure makefree;
end;

TObjekt2=class(TForm);
inhalt:TObjekt1;
procedure init;
procedure beenden;


procedure TObjekt1.init;
begin
  Stringlist1:=TStringlist.create;
  Stringlist2:=TStringlist.create;
  Stringlist3:=TStringlist.create;
end;

procedure TObjekt1.makefree;
begin
  Stringlist1.free;
  Stringlist2.free; //Hier kommt die Zugriffsverletzung
  Stringlist3.free;
end;

procedure TObjekt2.init
begin
  inhalt:=TObjekt1.create;
  inhalt.init;
end;

procedure TObjekt2.beenden;
begin
  inhalt.makefree;
  inhalt.free;
  self.close;
end;
Ich hoffe ihr könnt damit etwas anfangen, aber der Gesamte Code wäre zu groß...denke ich.
Schon mal vielen dank im voraus.

mfg
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:06
Probiers mal mit

Delphi-Quellcode:
if Assigned(Stringlist) then
 FreeAndNil(StringList);//Oder StringList.Free;
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:14
Zitat:
Ich ein Grundobjekt.


An deinem Code kann ich keinen Fehler erkennen. Es gibt die Möglichkeit, dass du erstens irgendwo anders den Speicherbereich der ersten StringList (wahrscheinlich bezieht sich die Fehlermeldung auf die Zeile über dem Cursor) überschreibst oder - zweitens - MakeFree mehrmals aufrufst, das wäre natürlich fatal. Für 1. solltest du die Bereichsprüfung aktivieren, dann kann schonmal nicht mehr so viel schiefgehen. Für 2. reicht es, wenn du einen Breakpoint auf die erste Zeile der Routine setzt und die Vermutung überprüfst. Verhindern kannst du das Problem mit Delphi-Referenz durchsuchenFreeAndNil. Gibt es eigentlich einen Grund, dass du nicht einfach Kon- und Destruktor statt Init und MakeFree benutzt?

[add]Pff, ich schreibe zu langsam .
Zitat:
Delphi-Quellcode:
if Assigned(Stringlist) then
 FreeAndNil(StringList);//Oder StringList.Free;
Mit FreeAndNil reicht schon
FreeAndNil(StringList); Das Assigned ist überflüssig, da es schon in TObject.Free überprüft wird.
Und
Delphi-Quellcode:
// "Oder"-Teil
if Assigned(Stringlist) then
 StringList.Free;
wird nie funktionieren.[/quote]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Master of the Wind

Registriert seit: 20. Dez 2005
26 Beiträge
 
#4

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:17
Schade das von Angel4585 funktioniert nicht..es kommt immernoch "ungültige Zeigeroperation"
  Mit Zitat antworten Zitat
Master of the Wind

Registriert seit: 20. Dez 2005
26 Beiträge
 
#5

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:22
Also mit Konstruktor und Destruktor da hab ich immer so meiner Probleme wann override oder sonstwas naja. Deswegen hab ich das mal so gemacht. Die Stringlisten gebe ich nirgendwo anders Frei das steht fest. Das einzige was es noch sein kann ist:

Es gibt ein DLL procedure die auf alles zugreifen kann per zeiger auf das Oberste Objekt. Diese wird immer "ONIDLE" aufgerufen aber nur wenn die Variable initialized auf TRUE steht. Bevor ich aber alles objekte wieder Freigebe und das Programm beende, dann setze ich initialized auf FALSE.

Kann es das sein?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:25
Ändert das etwas:
Delphi-Quellcode:
TObjekt1 = class(TComponent)
  public
    Stringlist1:TStringlist;
    Stringlist2:TStringlist;
    Stringlist3:TStringlist;

    constructor Create(AOwner: TComponent) override;
    destructor Destroy override;
  end;
[...]

Delphi-Quellcode:
constructor TObjekt1.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Stringlist1:=TStringlist.create;
  Stringlist2:=TStringlist.create;
  Stringlist3:=TStringlist.create;
end;

destructor TObjekt1.Destroy;
begin
  Stringlist1.free;
  Stringlist2.free; //Hier kommt die Zugriffsverletzung
  Stringlist3.free;
  inherited Destroy;
end;
Auch noch die Create und Destroy Methoden hinzugefügt.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:27
Moin Zusammen,

nicht zu vergessen inherited beim constructor und destructor aufzurufen...
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:28
Hab mal ein Beispiel mit Create und Destroy gepostet.
Die Deklaration von TObject1 habe ich auch geändert. Vielleicht funktioniert es so.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Master of the Wind

Registriert seit: 20. Dez 2005
26 Beiträge
 
#9

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:33
Muss nochmal Fragen. Kann man im Konstruktor schon auf alle Variablen des Objektes Zugreifen?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: Problem bei TStringlist Freigabe

  Alt 20. Dez 2005, 16:39
Nach inherited denke ich schon. Auf die selbstdefinierten StringListen erst nach deren Erzeugung mit Create.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz