]> git.llucax.com Git - z.facultad/75.52/treemulator.git/commitdiff
Arreglo varios memory leaks.
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Wed, 26 Oct 2005 02:10:17 +0000 (02:10 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Wed, 26 Oct 2005 02:10:17 +0000 (02:10 +0000)
src/btree.cpp
src/btree_data.cpp
src/random.cpp

index 87471779f5f5ea15c12b7243e6b2842c40a51a54..4e00e3311d7c9ddd728929346677f1cde6166e5c 100644 (file)
@@ -393,7 +393,9 @@ void BTree::DelKey (const Clave &k)
 {
        std::string s = k;
        std::cout << "========= Borrando " << s << " =================\n";
-       DelKeyR (new BTreeLeafData (k.Clone ()), 0, 0);
+       BTreeData *b = new BTreeLeafData (k.Clone ());
+       DelKeyR (b, 0, 0);
+       delete b;
 }
 
 void BTree::DelKeyR (BTreeData *k, uint node_num, uint padre)
@@ -433,6 +435,8 @@ void BTree::DelKeyR (BTreeData *k, uint node_num, uint padre)
                                std::cout << "Eliminar de Nodo con hijos : " << left << " y " << right << std::endl;
                                DelKeyFromNode (k->getClave (), node_num, padre, left, right);
                        }
+                       DeleteKeys (node_keys);
+                       delete [] node;
                        return;
                }
 
@@ -469,7 +473,7 @@ void BTree::DelKeyFromLeaf (Clave *k, uint node_num, uint padre)
        ReadNodoHeader (node, &node_header);
        node_keys = ReadKeys (node, node_header);
 
-       data = new BTreeLeafData (k);
+       data = new BTreeLeafData (k->Clone ());
 
        std::list<BTreeData *>::iterator it;
        it = node_keys.begin ();
@@ -530,6 +534,9 @@ void BTree::DelKeyFromLeaf (Clave *k, uint node_num, uint padre)
                        }
 
                        JoinNodes (join1, join2, padre, tipoh);
+       
+                       DeleteKeys (node_keys);
+                       delete [] node;
                        return;
                }
 
@@ -1126,9 +1133,9 @@ BTreeFindResult *BTree::FindKeyR (const Clave *k, uint node_num)
 
        BTreeData *data;
        if (node_header.level == 0)
-               data = new BTreeLeafData ((Clave *)k);
+               data = new BTreeLeafData (k->Clone ());
        else
-               data = new BTreeData ((Clave *)k, 0);
+               data = new BTreeData (k->Clone (), 0);
 
        while (it != node_keys.end ()) {
                if ((*data) == (*(*it))) {
@@ -1147,6 +1154,14 @@ BTreeFindResult *BTree::FindKeyR (const Clave *k, uint node_num)
                it++;
        }
 
+       /* Si llego aca y estoy en nivel 0 (una hoja) quiere
+        * decir que no lo encontré
+        */
+       if (node_header.level == 0) {
+               delete data;
+               return NULL;
+       }
+
        /* TODO: Aca faltaria liberar memoria */
        if (it == posterior)
                return FindKeyR (k, lchild->getChild ());
index bf92909969aedf7630105ac8c91fc9db61b52661..b74427bbbb56755d957f74b5d9e8c8c880110f32 100644 (file)
@@ -24,8 +24,10 @@ BTreeData::BTreeData (Clave *k, uint child)
 
 BTreeData::~BTreeData ()
 {
-       if (clave)
+       if (clave) {
                delete clave;
+               clave = NULL;
+       }
 }
 
 uint BTreeData::Size () const
@@ -89,6 +91,10 @@ BTreeLeafData::BTreeLeafData (uchar *node, int key_type)
 
 BTreeLeafData::~BTreeLeafData ()
 {
+       if (clave) {
+               delete clave; 
+               clave = NULL;
+       }
 }
 
 uint BTreeLeafData::Size () const
index b4f126002a36584111cc06d2ab0510b1d7cc3647..8a36882bac2cab84a0b772794ff7781136eacda1 100644 (file)
@@ -47,6 +47,8 @@ void Random::Ints (std::list<int> &lst, uint n)
                numeros[random + 3 * n] = true;
                lst.push_back (random);
        }
+
+       delete [] numeros;
 }
 
 void Random::Strings (std::list<std::string> &lst, uint n)