请大家帮忙看看FastMM报的内存漏洞
对象的属性中Altns和Strips都是动态数组,
但是我在结束的时候也逐次用SetLength释放了
我不知道原因在哪里和怎么修改
请各位大侠提出建议
谢谢!
-----------------------------------------
//定义部分
//SStrips声明
type SStrip = record
JobType : Integer;
UpDst, DnDst : Double;
MchnID : Integer;
BlksVol : SVolAndSpls;
end;
type TStrips = Array of SStrip;
//SAltern声明
type SAltern = record
BlkObjID : Integer;
MchnGrpID : Integer;
Strips : TStrips;
Tried : ShortInt;
MachEquiped : Boolean;
ValidNow : Boolean;
Wght : Double;
end;
TAlterns = array of SAltern;
//SMatch的声明
type SMatch = record
SN : Integer;
Altns : TAlterns;
AltnsStr : TLongUnicodeString;
SaveTime : TDateTime;
Modified : Boolean;
ObjID, SvdSN : Integer;
end;
PSMatch = ^SMatch;
//相关执行部分
function EquipMchn4Prep(AMtchIdx : Integer; ACurTime : TDateTime) : Integer;
var
ArrCnt, ArrIdx, AvailCnt : Integer;
MchnCnt, MchnIdx : Integer;
IdxArr : TArrInt;
AItem : PSCable;
AMtch : PSMatch;
begin
Result := -1;
AMtch := PrepMtchs.Items[AMtchIdx]; //Items和SavedItems是TList类型,保存着指针.
ArrCnt := Length(AMtch^.Altns); AvailCnt := 0;
for ArrIdx := 0 to ArrCnt - 1 do
if (AMtch^.Altns[ArrIdx].Tried = 0) then
begin
AMtch^.Altns[ArrIdx].MachEquiped := False;
if AMtch^.Altns[ArrIdx].ValidNow then
begin
MchnCnt := CblCrns.Items.Count;
for MchnIdx := 0 to MchnCnt - 1 do
begin
AItem := CblCrns.Items[MchnIdx];
if AItem^.Active
and (not AItem^.B_Using)
and (CblCrns.CanActInBrk(AItem.BrkInfo, 0))
then begin
SetLength(AMtch^.Altns[ArrIdx].Strips, 1);
//FastMM报上面这句造成了内存漏洞(A memory block has been leaked. The size is: 436)
AMtch^.Altns[ArrIdx].Strips[0].MchnID := AItem^.ObjID;
AMtch^.Altns[ArrIdx].MachEquiped := True;
AvailCnt := AvailCnt + 1;
Break;
end;
end;
end;
end;
Result := AvailCnt;
SetLength(IdxArr, 0);
end;
//内存释放部分
procedure CPrepMatches.FreeCmplxVar(ItmIdx : Integer; ItmOrBak : Boolean = True); //复杂对象的内存释放
var
AMtch : PSMatch;
Idx : Integer;
begin
if ItmOrBak then AMtch := Items[ItmIdx]
else AMtch := SavedItems[ItmIdx];
for Idx := 0 to High(AMtch^.Altns) do
SetLength(AMtch^.Altns[Idx].Strips, 0);
SetLength(AMtch^.Altns, 0);
end;
相关推荐
Git-2.19.1-64-bit
Git-2.19.1-64-bit
Delphi 13.1 64位控件合集:生产级VCL组件实战指南
VCL控件是Windows桌面应用开发的核心基础组件,其64位兼容性直接决定Delphi项目在Win11及现代硬件上的部署可行性。原理上需满足PE头签名验证、IDE集成实测与运行时内存安全三重标准,技术价值在于规避WOW64桥接、GDI+崩溃、COM泄漏等典型陷阱,支撑高分辨率图像处理、百万行数据网格、大文件分片上传等企业级场景。本文聚焦Delphi 13.1环境下真实可用的23个经产线验证的64位VCL控件,涵盖TcxGrid64、TPictureBoxEx、TADO64Connection等关键组件,并
Delphi维护方法和技巧
Delphi维护方法和技巧 Delphi维护方法和技巧 Delphi维护方法和技巧 Delphi维护方法和技巧
typora中文安装包
typora中文安装包
基于springboot+vue的摄影作品社区(项目源码)
基于springboot+vue的摄影作品社区(项目源码) 系统采用前后端分离的 B/S 架构。后端基于 Spring Boot 2.7.2 与 Java 1.8 构建,以 MyBatis-Plus 完成数据访问、PageHelper 实现分页,用 MySQL 8 存储业务数据;身份认证采用 Sa-Token 轻量级框架并整合 JWT 令牌,配合 Redis 实现图形验证码缓存与会话存储;前端使用 Vue 3 与 Naive UI 构建界面,由 Vite 完成构建,看板统计图表基于 ECharts 渲染。系统面向普通用户与管理员两类角色:用户端提供注册登录、作品上传与归档、多条件检索浏览、作品集管理、分类与标签管理、摄影圈专题、回收站、个人设置与公告查看等功能;管理端提供数据看板、用户管理与公告管理等功能。


语言基础/算法/系统设计
