Forum: Programmieren allgemein
Delphi
by himitsu,
28. Jul 2022
Es gibt (leider) nur den TStringHelper für String/UnicodeString.
WideString, AnsiString und alle AnsiString-Ableger ala UTF8String sind davon "befreit".
Ebenfalls bei sowas wie TComponent.Caption geht es nicht, denn obwohl es ein String-Nachfahre ist, kennt TCaption den StringHelper nicht.
Alternativ muß man nach string(..) casten, um an den Helper zu kommen.
Forum: Programmieren allgemein
Delphi
by himitsu,
28. Jul 2022
im Stacktrace nachschauen, was vor dem UStrAsg war?
UStrAsg ist z.B. ein StringVariable1 := StringVariable2;
Im Prinzip stimmt die Aussage.
Erst nach "erfolgreichem" Create ist SL zugewiesen und Free kann auch wirklich was tun.
Forum: Programmieren allgemein
Delphi
by himitsu,
26. Jul 2022
Ist aber auch klar, warum.
Es geht seine Child-Liste durch und will bei dem JsonArr nachsehn, was im .Owned drin steht, also ob es das freigeben soll, oder nicht.
Frage ist jetzt nur, warum Eba vergessen hat bei Freigabe von TJSONArray in dessen Owner sich aus der Liste auszutragen.
z.B. bei TObjektList steht das "Owned" im Owner und nicht in jedem Child ... Er guckt also nur in sich...
Forum: Programmieren allgemein
Delphi
by himitsu,
26. Jul 2022
ReportMemoryLeaksOnShutdown := True;
Siehe FastMM Debug-Optionen
Oder eben sich ins Freigeben hängen ... dann siehst du was freigegeben wird (und was nicht) :angle:
Forum: Programmieren allgemein
Delphi
by himitsu,
26. Jul 2022
Beim Add übernimmt das JSONArray die Kontrolle, also Dieses gibt beim ersten Free auch P1 und P2 mit frei.
Nein.
Destroy ruft man im Allgemeinen niemals direkt auf.
Und wenn schon Free knallt, dann kann Destroy nur noch mehr knallen, weil das if Assigned(Self) im Free fehlt
und es dann nicht nur bei "ungültigen" Zeigern knallt, sondern auch noch bei nil.