Delphi TJSONObject 開放時に EInvalidPointer のエラー

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

コメント