From b43bca39dacac6ac7530b416790bf23b40080e0f Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Fri, 27 May 2022 09:19:46 +0200 Subject: [PATCH] using std::vector instead of raw array --- VirtualRobot/SceneObject.cpp | 22 ++++++++++++---------- VirtualRobot/XML/ObjectIO.cpp | 13 +++---------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/VirtualRobot/SceneObject.cpp b/VirtualRobot/SceneObject.cpp index 4fa1bbe8f..3d46ae106 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 2434027ba..c47299a9a 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; } -- GitLab