.
5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
de Alejandro Blanco -
Número de respuestas: 19
En respuesta a Alejandro Blanco
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
de Paola Russo Ganon -
Hola, quisiera consultarles por la función removerTClienteTClientesABB,
estoy teniendo problemas para implementar remover el nodo de un ABB en la opción cuando 2 hijos. He mirado las clases pero justo a esa parte no la abordan porque aparece en los prácticos y tareas, y también miré las diapositivas y el libro, pero ese tipo de código no me está funcionando a la hora de implementarlo en el programa.
Me gustaría entender mejor ¿qué pasos se deben seguir para remover un nodo de este tipo correctamente?
Desde ya, muchas gracias.
estoy teniendo problemas para implementar remover el nodo de un ABB en la opción cuando 2 hijos. He mirado las clases pero justo a esa parte no la abordan porque aparece en los prácticos y tareas, y también miré las diapositivas y el libro, pero ese tipo de código no me está funcionando a la hora de implementarlo en el programa.
Me gustaría entender mejor ¿qué pasos se deben seguir para remover un nodo de este tipo correctamente?
Desde ya, muchas gracias.
En respuesta a Paola Russo Ganon
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
de Federico Bello Perez -
Hola,
La idea alto nivel sería que tenes que ir buscando el `id` correspondiente recursivamente hasta encontrarlo. Una vez que lo encontrás tenes eliminarlo y hacer el "enganche".
El ejercicio 3e del práctico te podría ser útil.
Saludos
La idea alto nivel sería que tenes que ir buscando el `id` correspondiente recursivamente hasta encontrarlo. Una vez que lo encontrás tenes eliminarlo y hacer el "enganche".
El ejercicio 3e del práctico te podría ser útil.
Saludos
En respuesta a Alejandro Blanco
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Hola, me está marcando este mensaje de error en la sección de clientesABB. También se debe liberar la memoria asignada a un cliente cuando se remueve del ABB?
El problema seguramente esté en la función remover, ya que la otra la logré testear a mano y produce los resultados esperados.
No entiendo a que hace referencia el error que emite valgrind.
Gracias.
En respuesta a Máximo Timoteo Piccirillo Malanga
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
de Federico Bello Perez -
Hola,
Si, es necesario remover la memoria asignada al cliente también
Saludos
Si, es necesario remover la memoria asignada al cliente también
Saludos
En respuesta a Alejandro Blanco
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Buenas, estoy teniendo un problema con esta función y no sabría donde esta mi error, estos son los errores que me salen
En respuesta a Sebastián Alexis Beltran Morales
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Buenas, a mi también me sale lo mismo, pudiste solucionarlo? Porque el programa cuando no uso liberarTCliente me daba solamente perdida de memoria, el resto del trabajo lo hacía bien, y ahora con eso me da todos esos errores.
En respuesta a Octavio De León Ramírez
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Hola Sebastián y Octavio,
Les diría que tengan cuidado en el caso en que el nodo que quieran remover tenga tanto un subárbol derecho como izquierdo. Como habrán visto en el práctico, en ese caso se puede buscar el nodo máximo del subárbol izquierdo (o el mínimo del derecho), reemplazar la información del nodo que originalmente querían remover con la del nodo máximo, y luego llamar a la función de remover para el nodo máximo del subárbol izquierdo.
El problema a tener en cuenta es que la información de los nodos del ABB en esta tarea, que es de tipo TCliente, está en memoria dinámica. Por lo tanto, no alcanza con hacer que el nodo a remover contenga una referencia al TCliente del nodo máximo, ya que cuando llamen a remover para ese nodo, se liberará la memoria del TCliente, y la referencia quedará apuntando a un lugar de memoria que ya fue liberado.
Para solucionar esto, tendrían que tener una copia de la información del cliente del nodo máximo que no comparta memoria con el original. Probablemente vean que ya tienen una función en el .h de ClientesABB que puede servirles para eso.
Espero que haya quedado claro, cualquier cosa no duden en consultar.
Saludos!
Yael
Les diría que tengan cuidado en el caso en que el nodo que quieran remover tenga tanto un subárbol derecho como izquierdo. Como habrán visto en el práctico, en ese caso se puede buscar el nodo máximo del subárbol izquierdo (o el mínimo del derecho), reemplazar la información del nodo que originalmente querían remover con la del nodo máximo, y luego llamar a la función de remover para el nodo máximo del subárbol izquierdo.
El problema a tener en cuenta es que la información de los nodos del ABB en esta tarea, que es de tipo TCliente, está en memoria dinámica. Por lo tanto, no alcanza con hacer que el nodo a remover contenga una referencia al TCliente del nodo máximo, ya que cuando llamen a remover para ese nodo, se liberará la memoria del TCliente, y la referencia quedará apuntando a un lugar de memoria que ya fue liberado.
Para solucionar esto, tendrían que tener una copia de la información del cliente del nodo máximo que no comparta memoria con el original. Probablemente vean que ya tienen una función en el .h de ClientesABB que puede servirles para eso.
Espero que haya quedado claro, cualquier cosa no duden en consultar.
Saludos!
Yael
En respuesta a Yael Michelena Koifmann
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Buenas, al final llegué a eso si, pero muy clara la explicacion tambien, muchas gracias.
En respuesta a Alejandro Blanco
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
buenas, tras ejecutar el test 4 me muestra el siguiente error. Probé correr a mano las instrucciones del .in y parece hacer todo normalmente. Todos los otros test de este módulo y los anteriores me muestran --Bien--. Espero pronta respuesta, saludos cordiales
En respuesta a Valentin Ezequiel Petrone Ruiz
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Hola Valentin,
Estas liberando la memoria asignada al cliente cuando removes el nodo?
Saludos,
Yael
Estas liberando la memoria asignada al cliente cuando removes el nodo?
Saludos,
Yael
En respuesta a Valentin Ezequiel Petrone Ruiz
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Me aparece el mismo mensaje al hacer el test, tengo la misma duda
En respuesta a Alejandro Blanco
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
hola, quería consultarles sobre un problema que tuve al ejecutar el caso de prueba manualmente; como me marcaba error de perdida de memoria intente ejecutar el caso manualmente pero me encontré con este error, no entiendo a que se debe. El error es:
free(): double free detected in tcache 2
Aborted
espero su respuesta, muchas gracias.
free(): double free detected in tcache 2
Aborted
espero su respuesta, muchas gracias.
En respuesta a Alejandro Blanco
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
de Felipe Rosa IbãÃEz -
Buenas tardes, estoy teniendo este problema y no sabria a que se puede deber, alguna sugerencia? al hacer el diff es que me sale esto, de tamaño excedido. Gracias, saludos.
En respuesta a Felipe Rosa IbãÃEz
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Buenas tardes, me sumo a la duda del compañero, debido a que me está saliendo el mismo error, lo único que devuelve el programa es "tamaño excedido" y no puedo encontrar el error en mi función. Gracias
En respuesta a Fernando Toral Allende
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Hola,
Les sugiero que vayan ejecutando de a uno los pasos del test para poder localizar el error, el tamaño excedido se da porque el archivo diff es demasiado grande.
Saludos!
Yael
Les sugiero que vayan ejecutando de a uno los pasos del test para poder localizar el error, el tamaño excedido se da porque el archivo diff es demasiado grande.
Saludos!
Yael
En respuesta a Alejandro Blanco
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Hola, tengo este problema con el caso de prueba 4 t-clientesABB4-maxid-remover
En respuesta a Gastón Zabaleta Prieto
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Hola Gastón,
Como se comentó mas arriba, es necesario liberar la memoria asignada al cliente cuando removes del ABB.
Fijate estar haciendo eso correctamente.
Saludos,
Yael
Como se comentó mas arriba, es necesario liberar la memoria asignada al cliente cuando removes del ABB.
Fijate estar haciendo eso correctamente.
Saludos,
Yael
En respuesta a Yael Michelena Koifmann
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Lo que hago es crear un TClientesABB aux igualado a clientesABB, y despues de cambiar clientesABB hago delete aux, eso esta mal?
En respuesta a Gastón Zabaleta Prieto
Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.
Lo que quiero decir es que no alcanza con hacer un delete, deberías también en algún momento llamar a la función que libera la memoria del TCliente de ese nodo.
Saludos!
Yael
Saludos!
Yael