Forum: Algorithmen, Datenstrukturen und Klassendesign
by haentschman,
16. Mai 2019
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 heißt, das Dictionary gibt die Objekte frei
:gruebel: Hmm...eigentlich...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by haentschman,
16. Mai 2019
Moin...8-)
Sieht unspektulär aus...:gruebel: Kein Free für eine TCallInstance?
Versuche mal das:
procedure Tbc_AsteriskCallDictionaryDataModule.DataModuleCreate(Sender: TObject);
begin
inherited;
fCallInstanceDictionary := TCallInstanceDictionary.Create(); // die Values werden von der Liste freigeben
Forum: Algorithmen, Datenstrukturen und Klassendesign
by haentschman,
15. Mai 2019
Hallöle...8-)
Der Fehler riecht danach, daß ein Objekt, was im Dictionary liegt, extern vom Dictionary mit Free freigeben wurde. Dann hat das Dictionary nur einen Pointer der nicht mehr existiert. Prüfe mal darauf. :wink:
Zeige mal wie du die Objekte erzeugst und in das Dictionary legst.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by haentschman,
15. Mai 2019
TCallInstanceDictionary = class(TObjectDictionary<TCallID,TCallInstance>)
end;
TCallInstanceDictionary = class(TObjectDictionary<TCallID,TCallInstance>)
end;
..ist das ein Copy/Paste Fehler? :gruebel:
Ownerships:
http://docwiki.embarcadero.com/Libraries/Seattle/de/System.Generics.Collections.TObjectDictionary.Create
Das erkärt noch nicht den Fehler. Das müßte MemoryLeaks erzeugen....