From da49c3ea620ade5cadc2b2b1155e957e697e499d Mon Sep 17 00:00:00 2001 From: Simon Ottenhaus <simon.ottenhaus@kit.edu> Date: Mon, 23 Jun 2014 17:52:03 +0200 Subject: [PATCH] Fixed Memory Leak --- source/RobotAPI/drivers/WeissHapticSensor/Response.h | 8 +++++--- .../drivers/WeissHapticSensor/TactileSensor.cpp | 11 +++++++---- .../drivers/WeissHapticSensor/TactileSensor.h | 8 ++++---- .../drivers/WeissHapticSensor/WeissHapticSensor.cpp | 2 +- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/source/RobotAPI/drivers/WeissHapticSensor/Response.h b/source/RobotAPI/drivers/WeissHapticSensor/Response.h index 456ff392c..933f45af0 100644 --- a/source/RobotAPI/drivers/WeissHapticSensor/Response.h +++ b/source/RobotAPI/drivers/WeissHapticSensor/Response.h @@ -7,6 +7,7 @@ #include <stdexcept> #include <boost/format.hpp> #include <vector> +#include <Core/core/logging/Logging.h> struct Response { public: @@ -44,11 +45,12 @@ public: //std::strstream strStream; //strStream << "Command not successful: " << status_to_str( status ); //throw std::runtime_error(strStream.str()); - std::cerr << " status != E_SUCCESS" << std::endl; + std::stringstream ss; + ss << " status != E_SUCCESS"; for(int i=0; i<(int)len; i++){ - std::cerr << boost::format("%02X ") % (int)data[i]; + ss << boost::format("%02X ") % (int)data[i]; } - std::cerr << std::endl; + ARMARX_ERROR_S << ss.str(); throw TransmissionException(str(boost::format("Command not successful: %1% (0x%2$02X)") % status_to_str( status ) % status)); } } diff --git a/source/RobotAPI/drivers/WeissHapticSensor/TactileSensor.cpp b/source/RobotAPI/drivers/WeissHapticSensor/TactileSensor.cpp index 8ce5aaf15..b12d1163f 100644 --- a/source/RobotAPI/drivers/WeissHapticSensor/TactileSensor.cpp +++ b/source/RobotAPI/drivers/WeissHapticSensor/TactileSensor.cpp @@ -87,11 +87,13 @@ PeriodicFrameData TactileSensor::getPeriodicFrameData(Response *response) int count = (response->len - offset) / 2; int i; - short* data = new short[ count ]; + boost::shared_ptr<std::vector<short> > data; + data.reset(new std::vector<short>(count, 0)); + //short* data = new short[ count ]; for(i = 0; i < count; i++) { short value = response->getShort(i*2 + offset); - data[i] = value; + (*data)[i] = value; } return PeriodicFrameData(data, count, timestamp); } @@ -105,11 +107,12 @@ FrameData TactileSensor::getFrameData(Response *response) int count = (response->len - offset) / 2; int i; - short* data = new short[ sizeof(short) * count ]; + boost::shared_ptr<std::vector<short> > data; + data.reset(new std::vector<short>(count, 0)); for(i = 0; i < count; i++) { short value = response->getShort(i*2 + offset); - data[i] = value; + (*data)[i] = value; } return FrameData(data, count); } diff --git a/source/RobotAPI/drivers/WeissHapticSensor/TactileSensor.h b/source/RobotAPI/drivers/WeissHapticSensor/TactileSensor.h index c47414449..393e4cf74 100644 --- a/source/RobotAPI/drivers/WeissHapticSensor/TactileSensor.h +++ b/source/RobotAPI/drivers/WeissHapticSensor/TactileSensor.h @@ -41,19 +41,19 @@ typedef struct struct FrameData { public: - FrameData(short *data, int count) + FrameData(boost::shared_ptr<std::vector<short> > data, int count) : data(data), count(count) {} - short *data; + boost::shared_ptr<std::vector<short> > data; int count; }; struct PeriodicFrameData { public: - PeriodicFrameData(short *data, int count, unsigned int timestamp) + PeriodicFrameData(boost::shared_ptr<std::vector<short> > data, int count, unsigned int timestamp) : data(data), count(count), timestamp(timestamp) {} - short *data; + boost::shared_ptr<std::vector<short> > data; int count; unsigned int timestamp; }; diff --git a/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.cpp b/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.cpp index 4a5a731cd..82db8ae06 100644 --- a/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.cpp +++ b/source/RobotAPI/drivers/WeissHapticSensor/WeissHapticSensor.cpp @@ -98,7 +98,7 @@ void WeissHapticSensor::frameAcquisitionTaskLoop() { for (int x = 0; x < mi.res_x; x++) { - short val = data.data[y * mi.res_x + x]; + short val = (*data.data)[y * mi.res_x + x]; (*matrix)(y, x) = val; } } -- GitLab