diff --git a/simulators/c++2/src_simulator/app/TMLTask.cpp b/simulators/c++2/src_simulator/app/TMLTask.cpp
index 92196ad7620e8829bf694872473dfa9ac382e5d2..a2361081f3230daca1e741ef00e989c49847f5d5 100755
--- a/simulators/c++2/src_simulator/app/TMLTask.cpp
+++ b/simulators/c++2/src_simulator/app/TMLTask.cpp
@@ -78,6 +78,8 @@ TMLTask::~TMLTask(){
 	}
 #endif
 	if (_comment!=0) delete [] _comment;
+	if(_cpus != 0) delete[] _cpus; // free the allocation of cpu array
+	if(_fpgas != 0) delete[] _fpgas; // free the allocation of fpga array
 }
 
 std::string TMLTask::toShortString() const{
diff --git a/simulators/c++2/src_simulator/sim/SimComponents.cpp b/simulators/c++2/src_simulator/sim/SimComponents.cpp
index 948b32b0afb2cd38c5c2aaf7ab5ce640baefcc29..8ebc16f1a1ed9da2ff0a1e9c510174acdbd4c2f9 100644
--- a/simulators/c++2/src_simulator/sim/SimComponents.cpp
+++ b/simulators/c++2/src_simulator/sim/SimComponents.cpp
@@ -71,9 +71,16 @@ SimComponents::~SimComponents(){
 	for(SerializableList::iterator i=_serList.begin(); i != _serList.end(); ++i){
 		delete (*i);
 	}
+
 	for(SlaveList::iterator i=_slList.begin(); i != _slList.end(); ++i){
 		delete (*i);
 	}
+
+    for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){
+        //free tasks before terminate simulator
+        delete (*i);
+    }
+
 #ifdef EBRDD_ENABLED
 	for(EBRDDList::iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){
 		delete (*i);