diff --git a/examples/Importers/ImportMJCFDemo/BulletMJCFImporter.cpp b/examples/Importers/ImportMJCFDemo/BulletMJCFImporter.cpp index d8db32b0b..befb30032 100644 --- a/examples/Importers/ImportMJCFDemo/BulletMJCFImporter.cpp +++ b/examples/Importers/ImportMJCFDemo/BulletMJCFImporter.cpp @@ -195,6 +195,14 @@ struct BulletMJCFImporterInternalData m_pathPrefix[0] = 0; } + ~BulletMJCFImporterInternalData() + { + for (int i=0;im_materials.size();i++) - { - UrdfMaterial** matPtr = model->m_materials.getAtIndex(i); - if (matPtr) - { - UrdfMaterial* mat = *matPtr; - delete mat; - } - } - - for (int i=0;im_links.size();i++) - { - UrdfLink** linkPtr = model->m_links.getAtIndex(i); - if (linkPtr) - { - UrdfLink* link = *linkPtr; - delete link; - } - } - - for (int i=0;im_joints.size();i++) - { - UrdfJoint** jointPtr = model->m_joints.getAtIndex(i); - if (jointPtr) - { - UrdfJoint* joint = *jointPtr; - delete joint; - } - } + } } static bool parseVector4(btVector4& vec4, const std::string& vector_str) @@ -1471,6 +1433,7 @@ bool UrdfParser::loadUrdf(const char* urdfText, ErrorLogger* logger, bool forceF UrdfMaterial** mat =m_urdf2Model.m_materials.find(material->m_name.c_str()); if (mat) { + delete material; logger->reportWarning("Duplicate material"); } else { @@ -1494,6 +1457,7 @@ bool UrdfParser::loadUrdf(const char* urdfText, ErrorLogger* logger, bool forceF { logger->reportError("Link name is not unique, link names in the same model have to be unique"); logger->reportError(link->m_name.c_str()); + delete link; return false; } else { @@ -1542,6 +1506,7 @@ bool UrdfParser::loadUrdf(const char* urdfText, ErrorLogger* logger, bool forceF { logger->reportError("joint '%s' is not unique."); logger->reportError(joint->m_name.c_str()); + delete joint; return false; } else @@ -1552,6 +1517,7 @@ bool UrdfParser::loadUrdf(const char* urdfText, ErrorLogger* logger, bool forceF else { logger->reportError("joint xml is not initialized correctly"); + delete joint; return false; } } @@ -1666,7 +1632,8 @@ bool UrdfParser::loadSDF(const char* sdfText, ErrorLogger* logger) UrdfMaterial** mat =localModel->m_materials.find(material->m_name.c_str()); if (mat) { - logger->reportWarning("Duplicate material"); + logger->reportWarning("Duplicate material"); + delete material; } else { localModel->m_materials.insert(material->m_name.c_str(),material); @@ -1689,6 +1656,7 @@ bool UrdfParser::loadSDF(const char* sdfText, ErrorLogger* logger) { logger->reportError("Link name is not unique, link names in the same model have to be unique"); logger->reportError(link->m_name.c_str()); + delete link; return false; } else { @@ -1737,6 +1705,7 @@ bool UrdfParser::loadSDF(const char* sdfText, ErrorLogger* logger) { logger->reportError("joint '%s' is not unique."); logger->reportError(joint->m_name.c_str()); + delete joint; return false; } else @@ -1747,6 +1716,7 @@ bool UrdfParser::loadSDF(const char* sdfText, ErrorLogger* logger) else { logger->reportError("joint xml is not initialized correctly"); + delete joint; return false; } } diff --git a/examples/Importers/ImportURDFDemo/UrdfParser.h b/examples/Importers/ImportURDFDemo/UrdfParser.h index c22745b39..0bb291e58 100644 --- a/examples/Importers/ImportURDFDemo/UrdfParser.h +++ b/examples/Importers/ImportURDFDemo/UrdfParser.h @@ -195,7 +195,37 @@ struct UrdfModel { m_rootTransformInWorld.setIdentity(); } - + + ~UrdfModel() + { + for (int i = 0; i < m_materials.size(); i++) + { + UrdfMaterial** ptr = m_materials.getAtIndex(i); + if (ptr) + { + UrdfMaterial* t = *ptr; + delete t; + } + } + for (int i = 0; i < m_links.size(); i++) + { + UrdfLink** ptr = m_links.getAtIndex(i); + if (ptr) + { + UrdfLink* t = *ptr; + delete t; + } + } + for (int i = 0; i < m_joints.size(); i++) + { + UrdfJoint** ptr = m_joints.getAtIndex(i); + if (ptr) + { + UrdfJoint* t = *ptr; + delete t; + } + } + } }; class UrdfParser @@ -210,7 +240,6 @@ protected: int m_activeSdfModel; - void cleanModel(UrdfModel* model); bool parseInertia(UrdfInertia& inertia, class TiXmlElement* config, ErrorLogger* logger); bool parseGeometry(UrdfGeometry& geom, class TiXmlElement* g, ErrorLogger* logger); bool parseVisual(UrdfModel& model, UrdfVisual& visual, class TiXmlElement* config, ErrorLogger* logger);