From 14f7203f3b1c0b91b60987a56171f35f94eb3d23 Mon Sep 17 00:00:00 2001 From: company-desktop-computer Date: Mon, 26 Oct 2026 20:07:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=9B=B8=E6=9C=BA=20HLR=20?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=93=BE=E8=B7=AF=E4=B8=8A=E7=9A=84=E5=87=A0?= =?UTF-8?q?=E5=A4=84=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - hlrCalc 两处早退(HLR 结果为空、截面裁剪后为空)没有释放补充实体 arAdditional_all,补上释放;第一处早退发生在轴网克隆插入 result1 之前, 同时释放调用方移交所有权的 arAxisPtrs - mergeEnvelope 找不到可用的 3DSOLID 时直接返回,漏掉 arptrs 里由 GetDraw3dables 克隆出来的全部实体 - process_result 打成块失败时,subAr 里的实体没有被块表接管,需要自行释放 --- SourceCode/Code2026/CoreLibrary/AecDbCamera.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/SourceCode/Code2026/CoreLibrary/AecDbCamera.cpp b/SourceCode/Code2026/CoreLibrary/AecDbCamera.cpp index 8b5667e..32afb5c 100644 --- a/SourceCode/Code2026/CoreLibrary/AecDbCamera.cpp +++ b/SourceCode/Code2026/CoreLibrary/AecDbCamera.cpp @@ -771,7 +771,11 @@ namespace break; } - if (!pSolidAll) return NULL; + if (!pSolidAll) + { + deleteArrayVoidPtrs(arptrs); + return NULL; + } if (arptrs.isEmpty()) return pSolidAll; @@ -1117,6 +1121,8 @@ namespace { // 如果 ent 是 块参照,它不会有补充实体,结果需要打成块 // 块的属性和 pRef 一样 AcDbBlockReference *pSubRef = CoreTools::makeBlockReference(subAr, NULL); + if (!pSubRef) // 打成块失败时,subAr 里的实体没有被块表接管,需要自己释放 + deleteArrayVoidPtrs(subAr); subAr.removeAll(); if (pSubRef) { @@ -2067,6 +2073,8 @@ void AecDbXCamera::hlrCalc(AcDbObjectIdArray &arIds // 如果实体的PreprocessForHlr函数内,设置了 HLR_CALC,从而影响实体的 Draw3d 函数的返回 // 那么,其PreprocessForHlr函数一定要无条件设置回来 // rollback 回调用其内部的PreprocessForHlr函数 + deleteContainerOfArx(arAdditional_all); + deleteContainerOfArx(arAxisPtrs); rollback(arIds); return; } @@ -2083,6 +2091,7 @@ void AecDbXCamera::hlrCalc(AcDbObjectIdArray &arIds // 如果裁剪之后,没有结果了,回退实体状态 if (result1.empty() && result2.empty()) { + deleteContainerOfArx(arAdditional_all); rollback(arIds); return; } -- 2.54.0