CB100

Notas, resueltos y tps de la materia Algoritmos y Estructuras de Datos
Index Commits Files Refs README
commit 3b1224e3752cfbf8c0b8814d6e62edef3bd2903f
parent 632c8b6528d8459842ef12674d494290f7037499
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Sun, 23 Jun 2024 19:01:45 -0300

fix memory leaks and some errors reported on valgrind

Diffstat:
Mmenu.cpp | 25+++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/menu.cpp b/menu.cpp
@@ -67,8 +67,8 @@ Parada *Menu::paradaMasCercanaPorCoordenada(double coordX, double coordY) {
 void Menu::agregarElementoSinRepetir(std::vector<int> *lineas, std::vector<int> *vectorLineasAux) {
     size_t lineaTope = vectorLineasAux->size();
 
-    bool seRepite = false;
     for(size_t i = 0; i < lineaTope; i++) {
+        bool seRepite = false;
         for(size_t j = 0; j < lineas->size(); j++) {
             if((*vectorLineasAux)[i] == (*lineas)[j]) {
                 seRepite = true;
@@ -82,7 +82,7 @@ void Menu::agregarElementoSinRepetir(std::vector<int> *lineas, std::vector<int> 
 
 void Menu::lineasPorParada(List<Parada*> *paradas) {
     Parada *paradaAux;
-    std::vector<int> *vectorLineasAux = new std::vector<int>;
+    std::vector<int> *vectorLineasAux;
 
     paradas->startCursor();
     while(paradas->forwardCursor()){
@@ -135,6 +135,7 @@ size_t getTokens(std::string line, std::vector<std::string> &tokens) {
 
     lineStream.clear();
     lineStream.str(line);
+    token.clear();
 
     for(field = CALLE; std::getline(lineStream, token, CSV_DELIM); ++field) {
         // solucion a `token` es una cadena que contiene CSV_DELIM
@@ -444,6 +445,7 @@ void Menu::mostrarMenu() {
                 while(paradas->forwardCursor()) {
                     std::cout << " ยท " << paradas->getCursorData()->getDireccion() << "\n";
                 }
+                delete paradas;
                 break;
             case '4':
                 cantidadDeParadasPorLinea();
@@ -459,11 +461,12 @@ void Menu::mostrarMenu() {
                 std::cout << std::left << std::setw(38) << std::left << "=" << std::endl;
                 std::cout.fill('.');
 
+                paradas = NULL;
                 for(size_t i = 0; i < this->lineas->size(); ++i) {
                     paradas = buscarParadas(barrios, (*this->lineas)[i]);
                     if(paradas == NULL) {
                         std::cout << "no hay paradas de la linea indicada\n";
-                        break;
+                        continue;
                     }
 
                     std::ostringstream sstream;
@@ -476,6 +479,9 @@ void Menu::mostrarMenu() {
                 }
 
                 std::cout << std::endl;
+                if(paradas != NULL) {
+                    delete paradas;
+                }
                 break;
             case '5':
                 std::cout << "barrio> ";
@@ -554,4 +560,15 @@ void Menu::mostrarMenu() {
     }
 }
 
-Menu::~Menu() { }
+Menu::~Menu() {
+    Barrio *delBarrio;
+
+    this->barrios->startCursor();
+    while(this->barrios->forwardCursor()){
+        delBarrio = this->barrios->getCursorData();
+        delete delBarrio;
+    }
+
+    delete this->barrios;
+    delete this->lineas;
+}