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; }