Free Pascal:释放对象时出现 SIGSEGV 错误

Free Pascal: SIGSEGV error when freeing objects

我的 Pascal 程序应该将来自 JSON 对象的 JSON 数据存储到一个文件中,但是当释放子对象时我得到一个 SIGSEGV 错误。

文件实际上是正确保存的,因为随后释放了相应的对象。

这是我的代码:

...
var  dateiInhalt: TStringlist; jsondaten: string; 
     jsondatenobj,ebenejsondatensubobj,
     sekundaerebenejsondatensubobj,
     gjsonsubobj,hjsonsubobj,
     ijsonsubobj: TJSONObject;

...

dateiInhalt := TStringlist.Create;
jsondatenobj := TJSONObject.Create;
ebenejsondatensubobj := TJSONObject.Create;
sekundaerebenejsondatensubobj := TJSONObject.Create;
gjsonsubobj := TJSONObject.Create;
hjsonsubobj := TJSONObject.Create;
ijsonsubobj := TJSONObject.Create;

ebenejsondatensubobj.Add('vector',TJSONArray.Create(['x','y','z']));
jsondatenobj.Add('ebene',ebenejsondatensubobj); // add subobject (does work)

sekundaerebenejsondatensubobj.Add('vector',TJSONArray.Create(['x','y','z']));
jsondatenobj.Add('sekundaerebene',sekundaerebenejsondatensubobj); 

gjsonsubobj.Add('vector',TJSONArray.Create(['x','y','z']));
jsondatenobj.Add('g',gjsonsubobj);

jsondatenobj.Add('distance','5cm');

dateiInhalt.Add(jsondatenobj.AsJSON); // does work

ebenejsondatensubobj.Free; // no error for those freed objects
sekundaerebenejsondatensubobj.Free;
ijsonsubobj.Free;
hjsonsubobj.Free;
gjsonsubobj.Free;

dateiInhalt.SaveToFile(SaveDlgMain.FileName); // does work correctly
Application.MessageBox('File saved successfully','Saved', MB_ICONINFORMATION);

jsondatenobj.Free; // SIGSEGV appears here
showMessage('test');
dateiInhalt.Free;

...

我已经尝试更改 .free 命令的顺序,但在某些时候总是有 SIGSEGV。

我该怎么办?

提前致谢!

不要释放您已经传递给其他对象的对象。例如

       jsondatenobj.Add('g',gjsonsubobj);

将 gjsonsuobj 添加到 jsondatenobj,因此当释放 jsondateobj 时,gjsonsuobj 也会被释放。

如果你在 valgrind 中 运行 这个,你可能会得到一些双重免费。