OK, 1) hätte ich Dir/Euch ersparen können
Zu 2) Ja, ist ja auskommentiert, weil es nach dem JSON-Load immer knallt. Ansonsten würde sich das Objekt sauber in Wohlgefallen auflösen.
Zu der Form-Variablen FEntryList - die wird nur mit dem "Free"-Button freigegeben. Also quasi auf Anforderung, weil ich dann besser debuggen konnte. "Load" und "Free" (Breakpoint) drücken, also quasi nach dem Motto "Jeder nur ein Kreuz!".
Bei mir in XE5 kommt der abstrakte Error in Generics.Collections beim Zuweisen von Capacity, in der Folge wohl die gleiche Stelle wie bei XE7:
Delphi-Quellcode:
procedure TList<T>.DeleteRange(AIndex, ACount: Integer);
var
oldItems: array of T;
tailCount, I: Integer;
begin
if (AIndex < 0) or (ACount < 0) or (AIndex + ACount > Count)
or (AIndex + ACount < 0) then
raise EArgumentOutOfRangeException.CreateRes(@SArgumentOutOfRange);
if ACount = 0 then
Exit;
SetLength(oldItems, ACount);
FArrayManager.Move(FItems, oldItems, AIndex, 0, ACount); // Die hier knallt
Ein normales .Free klappt ja auch ohne Speicherlecks, auch bei den Generics. Solange ich nicht zwischendrin das Ganze per REST.Json aus einer Datei habe laden lassen
Ich würde, um himitsu's Fußzeile herauszukramen, meinen Müll gerne wegräumen, wenn ich denn wüsste wie
populate
1) In btnPopulateSaveClick wird die lokale entryList nicht freigegeben
2) Der Destruktor von TEntryList gibt seine FEntryLists nicht frei
-> Kein LEck mehr beim fröhligen populieren
load
1) Du überschriebst das FEntryList-Feld deiner Form mit einer neuen Instanz ohne eine evtl
bereits bestehende freizugeben
Weiterhin gibt das Formular sein FEntryLists
nicht frei. Damit sind wir bei deinem Punkt 2)
Woher der EAbstractError
kommt verstehe ich auch nicht.
Keine Ahnung was da schief läuft. Jemand eine Idee?
Ein "normales" TObjectList<TEntries>.Create().Free();
klappt ja auch ohne Probleme. Ich hätte gedacht dass der Json-Mechanismus da irgendwie die TObjectList nicht richtig aufbaut...