Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Ungültige Zeigeroperation (https://www.delphipraxis.net/200683-ungueltige-zeigeroperation.html)

Trafel21 16. Mai 2019 06:20

AW: Ungültige Zeigeroperation
 
Zitat:

Zitat von haentschman (Beitrag 1432309)
Moin...8-)
Sieht unspektulär aus...:gruebel: Kein Free für eine TCallInstance?

Versuche mal das:
Delphi-Quellcode:
procedure Tbc_AsteriskCallDictionaryDataModule.DataModuleCreate(Sender: TObject);
begin
  inherited;

  fCallInstanceDictionary := TCallInstanceDictionary.Create([doOwnsValues]); // die Values werden von der Liste freigeben
end;

procedure Tbc_AsteriskCallDictionaryDataModule.DataModuleDestroy(Sender: TObject);
begin
  inherited;
//  fCallInstanceDictionary.Clear; // vor dem Free brauchst du das nicht
  fCallInstanceDictionary.Free;
end;

Funktioniert, der Fehler kommt jetzt nicht mehr, danke. :) Lag es wirklich nur an doOwnsValues?

Muss ich die TCallInstance freigeben, ich dachte bei einer lokal erstellen Variable/Klasse passiert das nach Beendigung automatisch. Gilt das nicht für lokale Klassen?

haentschman 16. Mai 2019 06:29

AW: Ungültige Zeigeroperation
 
Zitat:

Muss ich die TCallInstance freigeben, ich dachte bei einer lokal erstellen Variable/Klasse passiert das nach Beendigung automatisch. Gilt das nicht für lokale Klassen?
Grundsatz: Alles was du erstellst, mußt du freigeben. Objektlisten/ObjektDictionarys erleichtern dir das mit dem Freigeben.

Objektlisten: Liste := TObjectList<TBlubb>.Create(True); // True heißt, die Liste gibt die Objekte frei
ObjektDictionary: Dictionary := TObjectDictionary<string, TBlubb>.Create([doOwnsValues]); // doOwnsValues heißt, das Dictionary gibt die Objekte frei

:gruebel: Hmm...eigentlich hättest du ohne doOwnsValues nur MemoryLeaks haben müssen. Das mit dem Clear vor dem Free muß ich mal ausprobieren...

MemoryLeaks anzeigen:
...in die DPR aufnehmen vor Application.Initialize:
Delphi-Quellcode:
ReportMemoryLeaksOnShutdown := True;

TiGü 16. Mai 2019 08:17

AW: Ungültige Zeigeroperation
 
Zitat:

Zitat von Trafel21 (Beitrag 1432310)
Muss ich die TCallInstance freigeben, ich dachte bei einer lokal erstellen Variable/Klasse passiert das nach Beendigung automatisch. Gilt das nicht für lokale Klassen?

Gilt für C++. Kommst du aus dieser Ecke?

Trafel21 16. Mai 2019 09:04

AW: Ungültige Zeigeroperation
 
Zitat:

Zitat von TiGü (Beitrag 1432315)
Zitat:

Zitat von Trafel21 (Beitrag 1432310)
Muss ich die TCallInstance freigeben, ich dachte bei einer lokal erstellen Variable/Klasse passiert das nach Beendigung automatisch. Gilt das nicht für lokale Klassen?

Gilt für C++. Kommst du aus dieser Ecke?

Ja, aus der Mikrocontroller-Programmierung. War aber früher nur für QAC Quellcodepflege und Unittests zuständig. Selbst entwickelt hab ich kaum, mir fehlt diesbzgl. noch Erfahrung. :pale:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr.
Seite 2 von 2     12   

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