Nicht schlecht. Erst TList mit Pointern, dann TObjectList mit Pointern, nun TObjectList mit TObjects. Es wird immer besser, der Code übersichtlicher, ich danke euch vielmals.
Wir haben es gleich geschafft, ich hoffe ich darf noch auf eure Hilfe zählen. EurekaLog meldet nun noch Speicherlecks hier:
Delphi-Quellcode:
function TTC7AutoStart.NewObservationFile(ASKind: TTC7AutoStartKind; FileName: string): boolean;
var
ASStruc: TTC7AutoStartStruc;
// ASPointer: PTTC7AutoStartStruc;
begin
result := false;
if FileExists(FileName) then begin
ASStruc := TTC7AutoStartStruc.Create; //<- Speicherleck
// ASStruc.EncyclopediaInfo := TTC7EncyclopediaData.Create;
// CreateAutoStartStruc(ASStruc);
Result := true;
ASStruc.Index := Self.Count;
ASStruc.EntryType := ASKind;
ASStruc.FileData.FileName := FileName;
ASStruc.FileData.FileHash := THash_SHA256.CalcFile(FileName, TFormat_HEX);
ASStruc.FileData.FileAttr := FileGetAttr(FileName);
ASStruc.FileData.FileDate := FileDateToDateTime(FileAge(FileName));
ASStruc.FileData.FileSize := GetFileSize(FileName);
if ASKind=asTextFile then ASStruc.FileData.FileTextLineCount := GetTextLineCountOfFile(FileName);
ASStruc.UniqueID := CreateUniqueID(ASStruc);
ASStruc.AutoStartDangerLevel := GetDangerLevel(ASStruc.UniqueID);
ASStruc.DeterminedFile := ASStruc.FileData.FileName;
GetFileInfo(ASStruc.FileData.FileName, ASStruc.DeterminedFileInfo);
ASStruc.IconCacheIndex := IconCache.FileCacheIndex(ASStruc.FileData.FileName, true);
// New(ASPointer);
// ASPointer^ := ASStruc;
Self.Add(ASStruc);
// ASStruc.Free;
end;
end;
Scheinbar darf ich das lokale Objekt nicht so einfach erstellen, der Liste hinzufügen und fertig. Freigeben darf ich das lokale Objekt auch nicht.
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.