如何解决Free Pascal:释放对象时出现 SIGSEGV 错误
我的 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','z']));
jsondatenobj.Add('sekundaerebene',sekundaerebenejsondatensubobj);
gjsonsubobj.Add('vector','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 中运行它,你可能会得到一些双重免费。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。