From b1470053f7172e36da2e4382f85a23fb75f42fef Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 30 Mar 2023 17:20:16 +0300 Subject: [PATCH] Fix incorrect memory management. --- src/libs/vdxf/vdxfengine.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/libs/vdxf/vdxfengine.cpp b/src/libs/vdxf/vdxfengine.cpp index 9be00ec1c..c8944ec0a 100644 --- a/src/libs/vdxf/vdxfengine.cpp +++ b/src/libs/vdxf/vdxfengine.cpp @@ -711,8 +711,17 @@ auto VDxfEngine::ExportToAAMA(const QVector &details) -> bool for(auto detail : details) { + // Use custom deleter function to lose ownership after adding the block + bool deleteBlock = true; + auto NoOpDeleter =[&deleteBlock](dx_ifaceBlock* block) + { + if (deleteBlock) + { + delete block; + } + }; - auto detailBlock = QSharedPointer::create(); + auto detailBlock = QSharedPointer(new dx_ifaceBlock, NoOpDeleter); QString blockName = detail.GetName(); if (m_version <= DRW::AC1009) @@ -740,6 +749,8 @@ auto VDxfEngine::ExportToAAMA(const QVector &details) -> bool insert->layer = *layer1; m_input->AddEntity(insert.take()); + + deleteBlock = false; // lose ownership } return m_input->fileExport(m_binary); @@ -929,7 +940,16 @@ auto VDxfEngine::ExportToASTM(const QVector &details) -> bool for(auto detail : details) { - auto detailBlock = QSharedPointer::create(); + // Use custom deleter function to lose ownership after adding the block + bool deleteBlock = true; + auto NoOpDeleter =[&deleteBlock](dx_ifaceBlock* block) + { + if (deleteBlock) + { + delete block; + } + }; + auto detailBlock = QSharedPointer(new dx_ifaceBlock, NoOpDeleter); QString blockName = detail.GetName(); if (m_version <= DRW::AC1009) @@ -959,6 +979,8 @@ auto VDxfEngine::ExportToASTM(const QVector &details) -> bool insert->layer = *layer1; m_input->AddEntity(insert.take()); + + deleteBlock = false; // lose ownership } return m_input->fileExport(m_binary);