From: Leandro Lucarella Date: Sat, 16 Dec 2006 17:54:45 +0000 (+0000) Subject: Evitamos memory leaks. X-Git-Tag: entrega-20061218~23 X-Git-Url: https://git.llucax.com/z.facultad/75.68/celdas.git/commitdiff_plain/586ad2d03cf73d7e75a1a2522db3e0c4eedd5e9c Evitamos memory leaks. --- diff --git a/trunk/src/SistemaAutonomo.tz b/trunk/src/SistemaAutonomo.tz index e301d6d..b47452a 100644 --- a/trunk/src/SistemaAutonomo.tz +++ b/trunk/src/SistemaAutonomo.tz @@ -30,8 +30,6 @@ Object : Teoria (aka Teorias) { - to set-ptr ptr p (pointer): ptr = p. - + to destroy: - TeoriaDelete(ptr). } Object : SistemaAutonomo { diff --git a/trunk/src/main.cpp b/trunk/src/main.cpp index 1489768..10da19f 100644 --- a/trunk/src/main.cpp +++ b/trunk/src/main.cpp @@ -41,7 +41,8 @@ int main(int argc, char* argv[]) e->inicializar() ; // Inicializo las teorias - CTeoria t1("Avanzar", "avanzar", 1, 1) ; + CTeoria* pt1 = new CTeoria("Avanzar", "avanzar", 1, 1) ; + CTeoria& t1 = *pt1; t1.datos_iniciales.add ("robot.sensor_adelante", 0) ; t1.datos_iniciales.add ("robot.sensor_atras", ANY) ; t1.datos_iniciales.add ("robot.sensor_derecha", ANY) ; @@ -59,8 +60,8 @@ int main(int argc, char* argv[]) t1.datos_finales.add ("robot.avanzo_derecha", 0) ; t1.datos_finales.add ("robot.avanzo_izquierda", 0) ; - - CTeoria t2("Retroceder", "retroceder", 1, 1) ; + CTeoria* pt2 = new CTeoria("Retroceder", "retroceder", 1, 1) ; + CTeoria& t2 = *pt2; t2.datos_iniciales.add ("robot.sensor_adelante", ANY) ; t2.datos_iniciales.add ("robot.sensor_atras", 0) ; t2.datos_iniciales.add ("robot.sensor_derecha", ANY) ; @@ -79,7 +80,8 @@ int main(int argc, char* argv[]) t2.datos_finales.add ("robot.avanzo_izquierda", 0) ; - CTeoria t3("Derecha", "derecha", 1, 1) ; + CTeoria* pt3 = new CTeoria("Derecha", "derecha", 1, 1) ; + CTeoria& t3 = *pt3; t3.datos_iniciales.add ("robot.sensor_adelante", ANY) ; t3.datos_iniciales.add ("robot.sensor_atras", ANY) ; t3.datos_iniciales.add ("robot.sensor_derecha", 0) ; @@ -98,7 +100,8 @@ int main(int argc, char* argv[]) t3.datos_finales.add ("robot.avanzo_izquierda", 0) ; - CTeoria t4("Eludir.1", "derecha", 1, 1) ; + CTeoria* pt4 = new CTeoria("Eludir.1", "derecha", 1, 1) ; + CTeoria& t4 = *pt4; t4.datos_iniciales.add ("robot.sensor_adelante", 1) ; t4.datos_iniciales.add ("robot.sensor_atras", ANY) ; t4.datos_iniciales.add ("robot.sensor_derecha", 0) ; @@ -117,10 +120,10 @@ int main(int argc, char* argv[]) t4.datos_finales.add ("robot.avanzo_izquierda", ANY) ; - a.teorias.add(t1.nombre, &t1) ; - a.teorias.add(t2.nombre, &t2) ; - a.teorias.add(t3.nombre, &t3) ; - a.teorias.add(t4.nombre, &t4) ; + a.teorias.add(t1.nombre, pt1) ; + a.teorias.add(t2.nombre, pt2) ; + a.teorias.add(t3.nombre, pt3) ; + a.teorias.add(t4.nombre, pt4) ; #ifdef DEBUG std::cout << "Agrega teoria: " << t1 << "\n"; std::cout << "\tdatos_iniciales:\n" << t1.datos_iniciales << "\n"; diff --git a/trunk/src/plugin.cpp b/trunk/src/plugin.cpp index 20096f3..52e1404 100644 --- a/trunk/src/plugin.cpp +++ b/trunk/src/plugin.cpp @@ -50,13 +50,6 @@ int SAbrTeoriaGetAccion(brEval args[], brEval* result, void* data) return EC_OK; } -// void TeoriaDelete(pointer{Teoria}) -int SAbrTeoriaDelete(brEval args[], brEval* result, void* data) -{ - delete (CTeoria*) BRPOINTER(args); - return EC_OK; -} - /////////////////////////// CSistemaAutonomo ///////////////////////// @@ -149,8 +142,6 @@ DLLEXPORT void SAbrFunctions(void *data) AT_STRING, AT_POINTER, 0); brNewBreveCall(data, "TeoriaGetAccion", SAbrTeoriaGetAccion, AT_STRING, AT_POINTER, 0); - brNewBreveCall(data, "TeoriaDelete", SAbrTeoriaDelete, - AT_NULL, AT_POINTER, 0); brNewBreveCall(data, "SistemaAutonomoNew", SAbrSistemaAutonomoNew, AT_POINTER, 0); brNewBreveCall(data, "SistemaAutonomoAddTeoria", SAbrSistemaAutonomoAddTeoria, diff --git a/trunk/src/sistemaautonomo.h b/trunk/src/sistemaautonomo.h index a7debcd..4aafef5 100644 --- a/trunk/src/sistemaautonomo.h +++ b/trunk/src/sistemaautonomo.h @@ -212,7 +212,12 @@ public: CSistemaAutonomo(): p_entorno(new CEntorno) {} // Destructor - ~CSistemaAutonomo() { delete p_entorno; } + ~CSistemaAutonomo() + { + delete p_entorno; + for (unsigned i = 0; i < teorias.count(); ++i) + delete teorias[i]; + } // Genera un nuevo plan void plan();