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