helodd 2016年07月22日
Delphi 自带的JSON内存释放问题
使用了 小飞鱼的例子( http://blog.csdn.net/gzxiaorou/article/details/44538193)解释JSON,在没有释放内存的情况不出现问题, 但在解释完释放变量,即出现了错误的指针。

unit Unit2;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.json;

type
TForm2 = class(TForm)
mmo1: TMemo;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
JSONObject: TJSONObject;
LItem: TJSONValue;
LJPair: TJSONPair;
weather: TJSONArray;
StrJson: String;
result: String;
i: Integer;
begin
StrJson := mmo1.text;//假定是上面那个json
JSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(StrJson), 0)
as TJSONObject;
JSONObject := (JSONObject.GetValue('results') as TJSONArray).Get(0)
as TJSONObject;
weather := JSONObject.GetValue('weather_data') as TJSONArray;

for i := 0 to weather.size - 1 do //应该是4条记录
begin
LItem := (weather.Get(i) as TJSONObject).GetValue('weather'); //得到weather的值
result := result + '|' + LItem.Value;
end;



Memo1.Text:= result;
weather.Free;
JSONObject.Free;
// 加上这个, 会出现内存错误, 请专家帮忙解释一下.



end;

end.



只有json 数据带有数组的情况会出错,没有数组的不出错 。 这个是system.json的一个BUG吗?


...全文
279 点赞 收藏 7
写回复
7 条回复

还没有回复,快来抢沙发~

发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

924

社区成员

3.3w+

社区内容

Delphi 网络通信/分布式开发
社区公告
暂无公告