From 7067b7b6b13e80e5dde8e498848385244db2a072 Mon Sep 17 00:00:00 2001
From: Florent Lamiraux <florent@laas.fr>
Date: Mon, 24 Sep 2012 11:12:01 +0200
Subject: [PATCH] Do not try to delete void*, behavior is undefined.

---
 include/dynamic-graph/value.h |  1 +
 src/command/value.cpp         | 11 ++++++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/include/dynamic-graph/value.h b/include/dynamic-graph/value.h
index 5630552..471e780 100644
--- a/include/dynamic-graph/value.h
+++ b/include/dynamic-graph/value.h
@@ -59,6 +59,7 @@ namespace dynamicgraph {
 	NB_TYPES
       };
       ~Value();
+      void deleteValue ();
       explicit Value(const bool& value);
       explicit Value(const unsigned& value);
       explicit Value(const int& value);
diff --git a/src/command/value.cpp b/src/command/value.cpp
index ddb616a..bc62d2b 100644
--- a/src/command/value.cpp
+++ b/src/command/value.cpp
@@ -67,7 +67,7 @@ namespace dynamicgraph {
       return value_->matrixValue();
     }
 
-    Value::~Value()
+    void Value::deleteValue ()
     {
       switch(type_) {
       case BOOL:
@@ -98,6 +98,11 @@ namespace dynamicgraph {
       }
     }
 
+    Value::~Value()
+    {
+      deleteValue ();
+    }
+
     Value::Value(const bool& value) : type_(BOOL), value_(new bool(value))
     {
     }
@@ -179,9 +184,9 @@ namespace dynamicgraph {
     Value Value::operator=(const Value& value)
     {
       if (&value != this) {
-	type_ = value.type_;
 	if(value_ != 0x0)
-		delete value_;
+	  deleteValue ();
+	type_ = value.type_;
 	void** ptValue = const_cast<void**>(&value_);
 	*ptValue = copyValue(value);
       }
-- 
GitLab