You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.3程序UnicodeString内存泄漏问题排查与解决

Delphi 11.3 UnicodeString内存泄漏排查与解决(Indy10 AIS解码程序场景)

问题背景

用Delphi 11.3编译的Windows小型AIS船舶交通解码程序,基于Indy10组件(TCPServer、TCPClient、UDPServer)实现数据接收处理。程序运行一天后关闭时,内存泄漏报告显示:

  • 25-40字节:UnicodeString ×235939
  • Unknown ×2

由于未手动创建过UnicodeString,初步怀疑泄漏点为:

  • 存在未调用Free的TStringList实例
  • Indy10组件自身的内存管理问题

排查过程更新

进一步聚焦Delphi标准String未被正常释放的场景:
程序通过3个Indy10输入源接收数据,将包含String字段的自定义TRecord通过PostMessage发送至主线程,且已对TRecord指针调用Dispose。排查AIS解码逻辑代码片段未发现明显问题。

最终原因与解决方法

泄漏的UnicodeString属于某自定义TRecord,问题出在**每次处理新数据前用FillChar清空该TRecord**的操作:
FillChar会直接覆盖TRecord的内存区域,破坏了其中UnicodeString的引用计数信息,导致内存管理器无法识别该String需要被释放,最终引发大量内存泄漏。

移除FillChar清空TRecord的操作后,内存泄漏问题彻底解决。

内容的提问来源于stack exchange,提问作者Bart Kindt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:42:46