Als Folge von Owned=false löst jetzt aber die Wertübergabe requestString:=json.ToString eine Zugriffsverletzung aus. Wieso?
Hab das TJSONArray nicht auf owned gesetzt.
@Himitsu:
so tief will ich garnicht reingehen, aber trotzdem danke für diesen Tiefenblick.
Was wird eigentlich alles freigegeben, wenn die procedure zu Ende ist, in der ich die TJSON-Objekte erzeuge?
Wie kann ich messen, ob ich innerhalb einer procedure ein Speicherleck habe (ich habe bisher nur den Taskmanager beobachtet, wie sich der Speicher meiner App verändert)?
Edit:
Ich habe ein seltsamens Phänomen mit dem Inhalt von meiner json-Variable. Ich beobachte sie durch die Auswertung von json.toString.
Delphi-Quellcode:
try
jsonArr:= TJSONArray.Create;
jsonArr.owned:=false;
jsonArr.Add(p1);
jsonArr.Add(p2);
json.AddPair('path', jsonArr);
Bis hier steht in meinem json.toString:
'{"is_left_test_point":true,"installation_info":"" ,"path":[{"is_agc_on":false,"att_post":0,"eol":-7},{"is_agc_on":false,"att_post":0,"eol":1}]}'
Dann wird das ausgeführt:
Delphi-Quellcode:
finally
jsonArr.Free;
jsonArr:=nil;
end;
In dem Moment, wo jsonArr.Free gesetzt wird, ändert sich die json.toString zu:
'{"is_left_test_point":true,"installation_info":"" ,"path":{"is_left_test_point":true,"installation_i nfo":"",}'
Wie kann das denn sein?!?