Delphi TJSONObject 開放時に EInvalidPointer のエラー

 Delphi TJSONObject + TJSONArray を利用して、開放しようとするとエラーが発生
Json := TJSONObject.Create;
try
    JsonTagsArray := TJSONArray.Create;
    try
        Json.AddPair('Array', JsonTagsArray);
        Caption := Json.ToString
    finally
       JsonTagsArray.Free;
    end;
finally
    Json.Free; // ここでエラー
end;
Json.Free をコメントアウトするとエラーは発生しなくなるが、メモリリークが発生
Json := TJSONObject.Create;
try
    JsonTagsArray := TJSONArray.Create;
    try
        Json.AddPair('Array', JsonTagsArray);
        Caption := Json.ToString
    finally
       JsonTagsArray.Free;
    end;
finally
    // Json.Free; // メモリリークが起きる
end;
どうも TJSONArray に限らず、TJSONObject が開放されるときは配下もろとも開放されるらしく、入れ子になった TJSONObject でも同様の対応でよいみたい
Json := TJSONObject.Create;
try
    JsonTagsArray := TJSONArray.Create;
    try
        Json.AddPair('Array', JsonTagsArray);
        Caption := Json.ToString
    finally
       // JsonTagsArray.Free; // 開放しなくてよい
    end;
finally
    Json.Free;
end;
aaaa

コメント