diff --git a/VirtualRobot/SceneObject.cpp b/VirtualRobot/SceneObject.cpp index 4fa1bbe8fa36eef44ba19dbfcad8ef4cb3c217b1..3d46ae1064d997e5695c39f90c30c0d6b9172de7 100644 --- a/VirtualRobot/SceneObject.cpp +++ b/VirtualRobot/SceneObject.cpp @@ -1466,26 +1466,28 @@ namespace VirtualRobot if (!collisionModelXML.empty()) { rapidxml::xml_document<> doc; - char* cstr = new char[collisionModelXML.size() + 1]; // Create char buffer to store string copy - strcpy(cstr, collisionModelXML.c_str()); // Copy string into char buffer - doc.parse<0>(cstr); + + std::vector<char> cstr(collisionModelXML.size() + 1); // Create char buffer to store string copy + strcpy(cstr.data(), collisionModelXML.c_str()); // Copy string into char buffer + doc.parse<0>(cstr.data()); collisionModel = BaseIO::processCollisionTag(doc.first_node(), name, basePath); - if (collisionModel && scaling != 1.0f) collisionModel = collisionModel->clone(collisionChecker, scaling); - delete[] cstr; + if (collisionModel && scaling != 1.0f) { + collisionModel = collisionModel->clone(collisionChecker, scaling); + } reloaded = true; } if (!visualizationModelXML.empty()) { rapidxml::xml_document<> doc; - char* cstr = new char[visualizationModelXML.size() + 1]; // Create char buffer to store string copy - strcpy(cstr, visualizationModelXML.c_str()); // Copy string into char buffer - doc.parse<0>(cstr); + std::vector<char> cstr(collisionModelXML.size() + 1); // Create char buffer to store string copy + strcpy(cstr.data(), visualizationModelXML.c_str()); // Copy string into char buffer + doc.parse<0>(cstr.data()); bool useAsColModel; visualizationModel = BaseIO::processVisualizationTag(doc.first_node(), name, basePath, useAsColModel); if (visualizationModel && scaling != 1.0f) visualizationModel = visualizationModel->clone(true, scaling); - if (visualizationModel && collisionModel == nullptr && (useVisAsColModelIfMissing || useAsColModel)) + if (visualizationModel && collisionModel == nullptr && (useVisAsColModelIfMissing || useAsColModel)) { collisionModel.reset(new CollisionModel(visualizationModel->clone(true), getName() + "_VISU_ColModel", CollisionCheckerPtr())); - delete[] cstr; + } reloaded = true; } for (auto child : this->getChildren()) { diff --git a/VirtualRobot/XML/ObjectIO.cpp b/VirtualRobot/XML/ObjectIO.cpp index 2434027ba0e76af4a0dd6d32e1165238e2d6ace8..c47299a9a8f82827654e26d91a0496d74f20b4ff 100644 --- a/VirtualRobot/XML/ObjectIO.cpp +++ b/VirtualRobot/XML/ObjectIO.cpp @@ -245,25 +245,22 @@ namespace VirtualRobot VirtualRobot::ManipulationObjectPtr ObjectIO::createManipulationObjectFromString(const std::string& xmlString, const std::string& basePath /*= ""*/) { // copy string content to char array - char* y = new char[xmlString.size() + 1]; - strncpy(y, xmlString.c_str(), xmlString.size() + 1); + std::vector<char> y(xmlString.size() + 1); + strncpy(y.data(), xmlString.c_str(), xmlString.size() + 1); VirtualRobot::ManipulationObjectPtr obj; try { rapidxml::xml_document<char> doc; // character type defaults to char - doc.parse<0>(y); // 0 means default parse flags + doc.parse<0>(y.data()); // 0 means default parse flags rapidxml::xml_node<char>* objectXMLNode = doc.first_node("ManipulationObject"); obj = processManipulationObject(objectXMLNode, basePath); - - } catch (rapidxml::parse_error& e) { - delete[] y; THROW_VR_EXCEPTION("Could not parse data in xml definition" << endl << "Error message:" << e.what() << endl << "Position: " << endl << e.where<char>() << endl); @@ -272,24 +269,20 @@ namespace VirtualRobot catch (VirtualRobot::VirtualRobotException&) { // rethrow the current exception - delete[] y; throw; } catch (std::exception& e) { - delete[] y; THROW_VR_EXCEPTION("Error while parsing xml definition" << endl << "Error code:" << e.what() << endl); return ManipulationObjectPtr(); } catch (...) { - delete[] y; THROW_VR_EXCEPTION("Error while parsing xml definition" << endl); return ManipulationObjectPtr(); } - delete[] y; return obj; }