![]() |
Delphi-Version: 10 Seattle
TJson.Format(..) fehlerhaft?
Im
![]()
Delphi-Quellcode:
ist zumindest in 10 Seattle kaputt. Kann das jemand mit Berlin/Tokyo immer noch bestätigen?
TJson.Format(..)
Button1 und Memo1 aufs Formular, dann
Delphi-Quellcode:
TJson.Format liefert beim ersten mal
uses
Rest.Json, System.Json; {$R *.dfm} procedure TForm17.Button1Click(Sender: TObject); var objects: TArray<TObject>; arrayIndex: Integer; objectAsJson: TJsonValue; objectAsString: String; begin objects := TArray<TObject>.Create( TObject.Create(), TObject.Create(), TObject.Create() ); for arrayIndex := Low(objects) to High(objects) do begin objectAsJson := TJson.ObjectToJsonObject(objects[arrayIndex]); try objectAsString := TJson.Format(objectAsJson); Memo1.Lines.Append(objectAsString); finally objectAsJson.Destroy(); end; end; end;
Delphi-Quellcode:
, beim zweiten mal allerdings
{}
Delphi-Quellcode:
und beim dritten mal
{}, {}
Delphi-Quellcode:
.
{}, {}, {}
Erwartet wäre drei mal
Delphi-Quellcode:
Das liegt anscheinend daran dass in TJson.Format(..) (Rest.Json.pas) munter gesagt wird
{}
Delphi-Quellcode:
obwohl Result noch nie zugewiesen wurde. Wenn die Methode das zweite mal betreten wird ist Result noch mit dem Ergebnis des ersten Durchlaufs belegt.
Result := Result + ...
Kann jemand prüfen ob das ab 10.1 Berlin und aufwärts immer noch auftritt? |
AW: TJson.Format(..) fehlerhaft?
Code:
So siehts in Toyko aus.
{
} { } { } { } { } { } |
AW: TJson.Format(..) fehlerhaft?
Solche Fehler gibt es leider oftmals, wenn Funktionen in einer Schleife aufgerufen werden und das Result nicht ordnungsgemäß initialisiert wird, also zu Beginn ein
Delphi-Quellcode:
.
Result := '';
Delphi gibt leider keine Warnung bei sowas aus, da gemanagte Typen automatisch initialisiert werden, allerdingt macht der Compiler aus
Delphi-Quellcode:
ein
function Test(...): string;
Delphi-Quellcode:
.
procedure Test(...; var Result: string);
Die implizite "lokale" Variable beim Aufrufer, für das Funktions-Result, wurde ja mit '' initialisiert, allerdings trifft das nur für den ersten Schleifendurchlauf zu, aber initialisiert ist initialisiert womit es keine Warnung gibt. Ich und auch Andere hatten schon mehrmals im QC darum gebeten, dass die "Variable wurde initialisiert"-Kennung für das Result von Funktionen zu Beginn der Funktion gelöscht wird, damit dieser Fehler endlich vom Compiler gemeldet werden kann ... tja, aber auf uns hört ja Niemand. |
AW: TJson.Format(..) fehlerhaft?
Das ist nicht die einzige völlig Offensichtliche vor dem der Compiler warnen sollte. Aber was uns Delphi-Entwickler nicht umbringt macht uns nur härter...
Da das RAD Studio so billig ist kann man sich grade für so etwas getrost ![]() |
AW: TJson.Format(..) fehlerhaft?
Falls jemand die Welt zu einem besseren Ort machen möchte wäre ein Vote im Bugtracker heute genau das richtige!
![]() |
AW: TJson.Format(..) fehlerhaft?
Gevotet! :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz