Ich hab meine Datenstruktur nun auf classes umgestellt, die Speicherung klappt auch. Mir werden allerdings immer noch Speicherlecks angezeigt und vermutlich mache ich was falsch bei der Belegung der Listen.
Ich habe eine Routine, die eine neue Klasse anlegt damit diese später verwendet werden kann. Und dort findet EurekaLog ein Speicherleck:
Delphi-Quellcode:
procedure TTC7AutoStart.CreateAutoStartStruc(var AutoStartStruc: TTC7AutoStartStruc);
{
Setzt die Daten eines AutoStartStruc auf definierte Anfangswerte.
}
var
ASStruc: TTC7AutoStartStruc;
EData: TTC7EncyclopediaData;
begin
ASStruc := TTC7AutoStartStruc.Create; //<- Speicherleck
EData := TTC7EncyclopediaData.Create; //<- Speicherleck
with ASStruc do begin
Index := -1;
EntryType := asUndefined;
AutoStartDangerLevel := dlMiddle;
UniqueID := '';
IconCacheIndex := -1;
DeterminedFile := '';
Status := stEnabled;
HasEncyclopediaEntry := false;
EncyclopediaInfo := EData;
with EncyclopediaInfo do begin
PrimaryID := '';
SecondIDList := '';
Caption := '';
Teaser := '';
Description := '';
CreateDate := '';
DangerLevel := 1; //entspricht dlMiddle
end;
with DeterminedFileInfo do begin
CompanyName := '';
FileDescription := '';
FileVersion := '';
InternalName := '';
LegalCopyright := '';
LegalTrademarks := '';
OriginalFilename := '';
ProductName := '';
ProductVersion := '';
Comments := '';
end;
with FileData do begin
FileName := '';
FileHash := '';
FileAttr := -1;
FileDate := 0;
FileSize := -1;
FileTextLineCount := -1;
end;
with RegData do begin
MainKey := '';
Path := '';
Key := '';
Value := '';
ValueHash := '';
end;
end;
AutoStartStruc := ASStruc;
// EData.Free; //<- wenn ich das mache, crasht es
// ASStruc.Free; //<- wenn ich das mache, crasht es
end;
Verwendet wird das dann so:
Delphi-Quellcode:
function TTC7AutoStart.NewAutostartFiles(ASKind: TTC7AutoStartKind; Directory: string): integer;
var
ASStruc: TTC7AutoStartStruc;
// ASPointer: PTTC7AutoStartStruc;
SRec: TSearchRec;
OK: integer;
Directory2: string;
begin
...
CreateAutoStartStruc(ASStruc);
ASStruc.Index := Self.Count;
ASStruc.EntryType := ASKind;
ASStruc.FileData.FileName := Directory2 + SRec.Name;
...
Self.Add(ASStruc);
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.