5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Federico Rivero -
Número de respuestas: 53

Dudas sobre el punto 5

En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Graciana Zecchi Ferrari -
Hola,

Tengo un problema con la implementación de las funciones maxId y remover al ejecutar el test grupoABB4. Hasta el paso 14 parece funcionar todo bien, pero cuando quiero buscar el id máximo luego de remover un visitante me devuelve un id sin sentido:

14> removerDeGrupoABB 21
El visitante con id 21 se removio del grupo.
15> maxIdGrupoABB
El mayor id en el grupo es 1652424619.

Estoy hace rato buscando como solucionar el problema pero no lo logro! Agradecería si pudiesen orientarme un poco.

Saludos,
Graciana
En respuesta a Graciana Zecchi Ferrari

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Fã‰Lix Michel Jure Altuna -

Me suena a que la variable que almacena ese valor,está sin inicializarse en algún lugar (?)

En respuesta a Fã‰Lix Michel Jure Altuna

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Graciana Zecchi Ferrari -
Hola, creo que está bien inicializada
Descubrí que cuando remuevo el visitante con id 21 la info de otro visitante se modifica mal, no pude solucionarlo pero seguro que tiene que ver con eso! 
Adjunto Captura de pantalla 2024-04-05 153022.png
En respuesta a Graciana Zecchi Ferrari

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Guzman Dufrechou Duarte -
Estaba con el mismo problema y lo solucione con "copiarTVisitante" lo que hago es buscar el remplazo y hago grupoABB->visitante=copiarTVisitante(remplazo->visitante).
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Valentín Barrera Fourcade -
Buenas noches, estoy teniendo varios errores que a priori no me doy cuenta como están relacionados ya que surgen de distintas funciones, pero los resultados son los esperados en todos los casos.
El primer error aparece en la linea 17>maxIdGrupoABB, que da el resultado esperado pero aparecen errores de varias funciones distintas a esta.
Luego en la linea 27(el primer imprimir) imprime el primer nodo bien, aparecen un monton de errores, y termina de imprimir el grupo bien. Algo similar sucede en la linea 30(segundo imprimir), y por ultimo el LiberarGrupoABB tambien da errores.
Mando toda la salida del caso de prueba ejecutado manualmente:

root@DESKTOP-AL75CEP:/home/prog2/lab2/tarea2# valgrind ./principal
==4489== Memcheck, a memory error detector
==4489== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==4489== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==4489== Command: ./principal
==4489==
Bienvenido al programa principal de ArteProg. Por favor ingrese su comando:
1> crearGrupoABB
El grupoABB ha sido creado de forma exitosa.
2> crearVisitante 7 Zenobia Gomez 16
Visitante creadox de forma exitosa.
3> agregarAGrupoABB
Se ha agregado el visitante al grupo de forma exitosa.
4> maxIdGrupoABB
El mayor id en el grupo es 7.
5> crearVisitante 21 Casimira Lopez 42
Visitante creadox de forma exitosa.
6> agregarAGrupoABB
Se ha agregado el visitante al grupo de forma exitosa.
7> maxIdGrupoABB
El mayor id en el grupo es 21.
8> crearVisitante 15 Valquiria Gomez 35
Visitante creadox de forma exitosa.
9> agregarAGrupoABB
Se ha agregado el visitante al grupo de forma exitosa.
10> maxIdGrupoABB
El mayor id en el grupo es 21.
11> crearVisitante 40 Zafiro Martinez 20
Visitante creadox de forma exitosa.
12> agregarAGrupoABB
Se ha agregado el visitante al grupo de forma exitosa.
13> maxIdGrupoABB
El mayor id en el grupo es 40.
14> removerDeGrupoABB 21
El visitante con id 21 se removio del grupo.
15> maxIdGrupoABB
El mayor id en el grupo es 40.
16> removerDeGrupoABB 40
El visitante con id 40 se removio del grupo.
17> maxIdGrupoABB
==4489== Invalid read of size 4
==4489== at 0x10B369: idTVisitante(rep_visitante*) (visitante.cpp:29)
==4489== by 0x10AB1A: main_maxIdGrupoABB(rep_grupoABB*) (principal.cpp:526)
==4489== by 0x1099E4: main (principal.cpp:224)
==4489== Address 0x4dd77e0 is 0 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
El mayor id en el grupo es 15.
18> crearVisitante 40 Zafiro Martinez 20
Visitante creadox de forma exitosa.
19> agregarAGrupoABB
Se ha agregado el visitante al grupo de forma exitosa.
20> crearVisitante 21 Casimira Lopez 42
Visitante creadox de forma exitosa.
21> agregarAGrupoABB
Se ha agregado el visitante al grupo de forma exitosa.
22> crearVisitante 25 Valquiria Gonzalez 19
Visitante creadox de forma exitosa.
23> agregarAGrupoABB
Se ha agregado el visitante al grupo de forma exitosa.
24> maxIdGrupoABB
El mayor id en el grupo es 40.
25> crearVisitante 45 Valquiria Garcia 33
Visitante creadox de forma exitosa.
26> agregarAGrupoABB
Se ha agregado el visitante al grupo de forma exitosa.
27> imprimirGrupoABB
Visitante Zenobia Gomez
Id: 7
Edad: 16
==4489== Invalid read of size 4
==4489== at 0x10B452: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd78ac is 204 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
==4489== Invalid read of size 4
==4489== at 0x10B45C: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd77e0 is 0 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
==4489== Invalid read of size 1
==4489== at 0x484ED16: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x4B06D30: __vfprintf_internal (vfprintf-internal.c:1517)
==4489== by 0x4AF079E: printf (printf.c:33)
==4489== by 0x10B486: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd77e4 is 4 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
==4489== Invalid read of size 1
==4489== at 0x484ED24: strlen (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x4B06D30: __vfprintf_internal (vfprintf-internal.c:1517)
==4489== by 0x4AF079E: printf (printf.c:33)
==4489== by 0x10B486: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd77e5 is 5 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
==4489== Invalid read of size 1
==4489== at 0x4B1B734: _IO_new_file_xsputn (fileops.c:1218)
==4489== by 0x4B1B734: _IO_file_xsputnUndetermined error: @@GLIBC_2.2.5 (fileops.c:1196)
==4489== by 0x4B0700B: outstring_func (vfprintf-internal.c:239)
==4489== by 0x4B0700B: __vfprintf_internal (vfprintf-internal.c:1517)
==4489== by 0x4AF079E: printf (printf.c:33)
==4489== by 0x10B486: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd77ec is 12 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
==4489== Invalid read of size 1
==4489== at 0x48534F0: mempcpy (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x4B1B664: _IO_new_file_xsputn (fileops.c:1235)
==4489== by 0x4B1B664: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1196)
==4489== by 0x4B0700B: outstring_func (vfprintf-internal.c:239)
==4489== by 0x4B0700B: __vfprintf_internal (vfprintf-internal.c:1517)
==4489== by 0x4AF079E: printf (printf.c:33)
==4489== by 0x10B486: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd77e4 is 4 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
==4489== Invalid read of size 1
==4489== at 0x48534FE: mempcpy (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x4B1B664: _IO_new_file_xsputn (fileops.c:1235)
==4489== by 0x4B1B664: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1196)
==4489== by 0x4B0700B: outstring_func (vfprintf-internal.c:239)
==4489== by 0x4B0700B: __vfprintf_internal (vfprintf-internal.c:1517)
==4489== by 0x4AF079E: printf (printf.c:33)
==4489== by 0x10B486: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd77e6 is 6 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
Visitante Valquiria Gomez
Id: 15
Edad: 35
Visitante Casimira Lopez
Id: 21
Edad: 42
Visitante Valquiria Gonzalez
Id: 25
Edad: 19
Visitante Zafiro Martinez
Id: 40
Edad: 20
Visitante Valquiria Garcia
Id: 45
Edad: 33
28> maxIdGrupoABB
El mayor id en el grupo es 45.
29> removerDeGrupoABB 40
El visitante con id 40 se removio del grupo.
30> imprimirGrupoABB
Visitante Zenobia Gomez
Id: 7
Edad: 16
Visitante Valquiria Gomez
Id: 15
Edad: 35
Visitante Casimira Lopez
Id: 21
Edad: 42
==4489== Invalid read of size 4
==4489== at 0x10B452: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd7e6c is 204 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
==4489== Invalid read of size 4
==4489== at 0x10B45C: imprimirTVisitante(rep_visitante*) (visitante.cpp:52)
==4489== by 0x10BBF4: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:33)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10BC04: imprimirTGrupoABB(rep_grupoABB*) (grupoABB.cpp:34)
==4489== by 0x10A9C0: main_imprimirGrupoABB(rep_grupoABB*) (principal.cpp:492)
==4489== by 0x109920: main (principal.cpp:216)
==4489== Address 0x4dd7da0 is 0 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
Visitante Valquiria Gonzalez
Id: 25
Edad: 19
Visitante Valquiria Garcia
Id: 45
Edad: 33
31> removerDeGrupoABB 25
El visitante con id 25 se removio del grupo.
32> imprimirGrupoABB
Visitante Zenobia Gomez
Id: 7
Edad: 16
Visitante Valquiria Gomez
Id: 15
Edad: 35
Visitante Casimira Lopez
Id: 21
Edad: 42
Visitante Valquiria Garcia
Id: 45
Edad: 33
33> liberarGrupoABB
==4489== Invalid free() / delete / delete[] / realloc()
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BFA8: liberarTGrupoABB(rep_grupoABB*&) (grupoABB.cpp:141)
==4489== by 0x10BF9C: liberarTGrupoABB(rep_grupoABB*&) (grupoABB.cpp:140)
==4489== by 0x10BF9C: liberarTGrupoABB(rep_grupoABB*&) (grupoABB.cpp:140)
==4489== by 0x10A9DF: main_liberarGrupoABB(rep_grupoABB*&) (principal.cpp:496)
==4489== by 0x109AA8: main (principal.cpp:232)
==4489== Address 0x4dd7c30 is 0 bytes inside a block of size 208 free'd
==4489== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B3AD: liberarTVisitante(rep_visitante*&) (visitante.cpp:37)
==4489== by 0x10BD07: borrarNodo(rep_grupoABB*&) (grupoABB.cpp:72)
==4489== by 0x10BDE2: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:89)
==4489== by 0x10BEB7: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:107)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10BDB1: removerTVisitanteTGrupoABB(rep_grupoABB*&, int) (grupoABB.cpp:84)
==4489== by 0x10ABFC: main_removerDeGrupoABB(rep_grupoABB*&) (principal.cpp:542)
==4489== by 0x109A77: main (principal.cpp:230)
==4489== Block was alloc'd at
==4489== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==4489== by 0x10B2AE: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:12)
==4489== by 0x10A110: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
==4489== by 0x1094FD: main (principal.cpp:161)
==4489==
Grupo liberado con exito.
34> Fin
Fin.
==4489==
==4489== HEAP SUMMARY:
==4489== in use at exit: 416 bytes in 2 blocks
==4489== total heap usage: 19 allocs, 19 frees, 76,672 bytes allocated
==4489==
==4489== LEAK SUMMARY:
==4489== definitely lost: 416 bytes in 2 blocks
==4489== indirectly lost: 0 bytes in 0 blocks
==4489== possibly lost: 0 bytes in 0 blocks
==4489== still reachable: 0 bytes in 0 blocks
==4489== suppressed: 0 bytes in 0 blocks
==4489== Rerun with --leak-check=full to see details of leaked memory
==4489==
==4489== For lists of detected and suppressed errors, rerun with: -s
==4489== ERROR SUMMARY: 239 errors from 11 contexts (suppressed: 0 from 0)
En respuesta a Valentín Barrera Fourcade

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Pablo Andres Balliva Costa -

Los errores de valgrind son todos de tipo: Address 0x4dd77e0 is 0 bytes inside a block of size 208 free'd, que significa que estás leyendo memoria que ya liberaste. Esto seguramente se deba a que no implementaste correctamente las funciones que modifican el árbol y te queda algún puntero apuntando a nodos que ya no deberían existir (o que fueron borrados por error).

Te sugiero que revises sobre todo removerTVisitanteTGrupoABB. En mi implementación es más del doble de larga que cualquiera de las otras funciones del módulo y tiene varios casos de borde.

En respuesta a Pablo Andres Balliva Costa

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Gonzalo Javier Diaz Ferreira -

Buenas!

No existe un error en el caso prueba para maxIdGrupoABB??

Porque el include indica que el árbol binario es NO VACIO, sin embargo, el caso prueba arranca CREANDO un ABB y luego pidiendo el maxId... lo cual arroja un error en no poder tomar un ID de un visitante (ROOT). 

Espero su respuesta.

Gracias!

Saludos.-


En respuesta a Gonzalo Javier Diaz Ferreira

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Federico Rivero -
Hola Gonzalo!

El caso de prueba comienza con:

crearGrupoABB
crearVisitante 7 Zenobia Gomez 16
agregarAGrupoABB
maxIdGrupoABB

Habrás borrado sin querer las líneas que agregan el visitante al grupo?

Saludos,
Federico
En respuesta a Pablo Andres Balliva Costa

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Nicolas Ron Calvo -
Estoy teniendo problemas con la función de removerTVisitanteTGrupoABB, ya que en el caso de prueba nº 4, en la linea 14 ya pierde memoria (El primer momento en que llama a esta función) y no se que puede estar mal, debido a que me guié completamente de las diapositivas de clase para hacerlo.

Esto me larga valgrind cuando hago el make t-grupoABB4:
> ==10181== 832 bytes in 4 blocks are definitely lost in loss record 1 of 1
> ==10181== at 0x4842F95: operator new(unsigned long) (vg_replace_malloc.c:483)
> ==10181== by 0x402B2F: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:11)
> ==10181== by 0x401D6B: main_crearVisitante(rep_visitante*&) (principal.cpp:337)
> ==10181== by 0x40139B: main (principal.cpp:161)
> ==10181==
En respuesta a Nicolas Ron Calvo

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Gonzalo Javier Diaz Ferreira -
Corrí con valgrind a mano, y me pasa lo mismo (que Nicolás).

Funciona correctamente pero no libera la memoria completamente... yo pensaba en que seguramente no estaríamos liberando la memoria asociada al visitante (porque por cada Nodo del árbol tenemos un visitante). El tema es que intenté pensar en el código y genera un error de violación de segmento.

Se les ocurre alguna forma?

Gracias
En respuesta a Gonzalo Javier Diaz Ferreira

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Fã‰Lix Michel Jure Altuna -

Estoy en exactamente el mismo problema. Idéntico.

En respuesta a Fã‰Lix Michel Jure Altuna

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Gonzalo Javier Diaz Ferreira -

Insisto. Para mí no basta con un delete al nodo auxiliar. Habría que liberar la memoria del visitante que contenía . 

Voy a seguir buscando la falla por ahí . 

En respuesta a Gonzalo Javier Diaz Ferreira

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Nicolas Ron Calvo -
No creo que vaya por ahí, ya que no tiene un campo que requiera memoria como en el caso de TFecha, cuando había que liberarla ya que uno de los campos lo tenía. En este caso da igual creo
En respuesta a Nicolas Ron Calvo

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Gonzalo Javier Diaz Ferreira -
Pero.... Al crear visitante pedis memoria...

Digo, mientras no liberas todo el grupo, vos removes un nodo del árbol y el dato (visitante) quedaría colgado. 


En respuesta a Gonzalo Javier Diaz Ferreira

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Nicolas Ron Calvo -
Cierto, mala mía. Se pide memoria al haber un campo del tipo TVisitante. Yo seguí la lógica del código basándome en las diapositivas de la clase, pero se ve que algo estoy pasando por alto, ya que si agrego alguna linea de código sobre la liberación de visitante me salen 5000 errores más de los que me salen si no lo hago
En respuesta a Nicolas Ron Calvo

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Pablo Andres Balliva Costa -

Por si a alguno le sirve: yo decidí implementar los nodos del árbol sin un id explícito. Cada vez que me tengo que referir al id llamo a la función idTVisitante sobre el TVisitante del nodo. Esto me trajo problemas a la hora de remover un nodo, porque la función maxIdTVisitanteTGrupoABB, que usé para encontrar el máximo no me dice en que nodo del árbol está. Esto no me permite "desacoplar" el visitante máximo del nodo que estoy por eliminar, porque para encontrarlo tiene que tener un visitante enganchado, que me permita invocar a idTVisitante. Al principio no me di cuenta y el test me daba caramelos y bolitas, porque liberaba el nodo de más abajo con visitante máximo y todo y después pretendía usarlo. La solución que encontré fue asignarle al nodo actual una copia del visitante máximo, y recién después liberar.

En lo que sería el último else de las diapositivas del teórico (p. 41) es donde se juega el partido de esta función.

En respuesta a Pablo Andres Balliva Costa

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Gonzalo Javier Diaz Ferreira -
Pablo. Cómo va?

Yo para resolverlo hice una solución similar a eso que comentas.

Lo que no entiendo y falla en el módulo es ¿Vos usas la función liberarTVisitante?
A mí entender en la parte de borrar el nodo (que se usa delete) habría que liberar esa memoria, pero no me funciona y no logro entender el porqué...
En respuesta a Gonzalo Javier Diaz Ferreira

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Fã‰Lix Michel Jure Altuna -

Che sigo en la misma,alguna otra sugerencia? (ya me quitó demasiado tiempo esta función je). Gracias desde ya.

En respuesta a Fã‰Lix Michel Jure Altuna

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Nicolas Ron Calvo -
En relación a este procedimiento, cualquier ayuda, idea, sugerencia o tip de que puede estar pasando que nos pierde memoria se agradece, a mi también me está quitando pila de tiempo este procedimiento
En respuesta a Gonzalo Javier Diaz Ferreira

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Pablo Andres Balliva Costa -

La letra de la tarea recomienda crear una función auxiliar para liberar un nodo individual, yo lo hice así y me parece que rinde. En esa función uso liberarTVisitante para liberar el visitante. (Además de liberar el nodo; recordemos que cada nodo está compuesto de tres punteros: uno al visitante y uno a cada subárbol.)

En mi implementación de removerTVisitanteTGrupoABB invoco a esa función auxiliar en lo que sería la línea delete aBorrar; del teórico, pero el último else es más delicado, porque el t->info = … del teórico no es solamente una asignación: acá hay un visitante (el del nodo actual) que yo estoy queriendo remover del árbol, por lo que también debo liberar la memoria. (Después, además, deberé asignarle al nodo el visitante con el id más grande del subárbol izquierdo, como dice el .h.) El truco está en que del nodo actual solo cambio su id e info, y sí borro el de más abajo.

Si sigue sin andar te sugiero hacer el dibujo de un árbol concreto y correr el algoritmo en papel. La alternativa que yo usé fue instalar un debugger en el VSCode, que permite correr el programa paso a paso e ir viendo como cambian las variables de interés. Pero si nunca usaste uno te va a dar más problemas que soluciones.

En respuesta a Gonzalo Javier Diaz Ferreira

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Mateo Sebastian Yañez Peloche -
estoy en la misma, cuando intento llamar a la función liberarTVisitante para liberar la memoria del nodo auxiliar, me saltan muchísimos errores mas del estilo Invalid read of size 4. pudiste solucionar?
En respuesta a Nicolas Ron Calvo

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Mateo Sebastian Yañez Peloche -
tengo el mismo problema, pudiste solucionar?
En respuesta a Mateo Sebastian Yañez Peloche

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Mateo Sebastian Yañez Peloche -

solucioné parte de la memoria perdida liberando el visitante que quería borrar antes de suplantarlo con el visitante de mayor id del árbol izquierdo, capaz a alguien le sirve. 

En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Roberto Rodolfo Sosa Miranda -
Buen dia. me sucede que al ejecutar la funcion remover sin valgrind funciona sin problemas en el caso de remover el nodo con 2 hijos, pero cuando lo hago con valgrind, luego de remover dicho nodo, llamo a la funcion imprimirGrupoABB y me salta el siguiente error:

Me pueden dar una idea de donde puede estar la falla porque hace dias vengo tratando y no logro que funcione.

Adjunto Captura de pantalla de 2024-04-10 07-54-50.png
En respuesta a Roberto Rodolfo Sosa Miranda

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Nestor Rocchetti -
Buenos días Roberto,

Al parecer lo que dice ahí es que en el momento de hacer un delete, se está tratando de liberar memoria que ya fue liberada anteriormente. Fijate bien como gestionás la memoria.

Saludos!
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Marcelo Scalone Correa -
Buenas tardes, estoy teniendo problemas al hacer la funcion de eliminar un nodo, me sale este error, llevo rato y no encuentro el error


En respuesta a Marcelo Scalone Correa

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Pablo Andres Balliva Costa -
Hola, Marcelo. Fijate la discusión que tuvimos, más arriba en este mismo hilo, con otros compañeros con similares errores. Capaz que algo de todo lo que se dijo sirve.
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Enzo Rodolfo Noni Perez -
Hola buenas, estoy teniendo un problema, hago el make testing y me dice que esta mal, pero pruebo a mano el test y la salida es la misma que la que tiene que salirme, y me fije despues tambien si era algun problema de memoria pero tampoco lo es, no entiendo que puede ser, pensé que capaz era por el orden, pero tampoco, siento que lo hace en orden(n) como pide el ejercicio.
Bienvenido al programa principal de ArteProg. Por favor ingrese su comando:
1> El grupoABB ha sido creado de forma exitosa.
2> Visitante creadox de forma exitosa.
3> Se ha agregado el visitante al grupo de forma exitosa.
4> El mayor id en el grupo es 7.
5> Visitante creadox de forma exitosa.
6> Se ha agregado el visitante al grupo de forma exitosa.
7> El mayor id en el grupo es 21.
8> Visitante creadox de forma exitosa.
9> Se ha agregado el visitante al grupo de forma exitosa.
10> El mayor id en el grupo es 21.
11> Visitante creadox de forma exitosa.
12> Se ha agregado el visitante al grupo de forma exitosa.
13> El mayor id en el grupo es 40.
14> El visitante con id 21 se removio del grupo.
15> El mayor id en el grupo es 40.
16> El visitante con id 40 se removio del grupo.
17> El mayor id en el grupo es 15.
18> Visitante creadox de forma exitosa.
19> Se ha agregado el visitante al grupo de forma exitosa.
20> Visitante creadox de forma exitosa.
21> Se ha agregado el visitante al grupo de forma exitosa.
22> Visitante creadox de forma exitosa.
23> Se ha agregado el visitante al grupo de forma exitosa.
24> El mayor id en el grupo es 40.
25> Visitante creadox de forma exitosa.
26> Se ha agregado el visitante al grupo de forma exitosa.
27> Visitante Zenobia Gomez
Id: 7
Edad: 16
Visitante Casimira Lopez
Id: 15
Edad: 35
Visitante Casimira Lopez
Id: 21
Edad: 42
Visitante Valquiria Gonzalez
Id: 25
Edad: 19
Visitante Zafiro Martinez
Id: 40
Edad: 20
Visitante Valquiria Garcia
Id: 45
Edad: 33
28> El mayor id en el grupo es 45.
29> El visitante con id 40 se removio del grupo.
30> Visitante Zenobia Gomez
Id: 7
Edad: 16
Visitante Casimira Lopez
Id: 15
Edad: 35
Visitante Casimira Lopez
Id: 21
Edad: 42
Visitante Zafiro Martinez
Id: 25
Edad: 19
Visitante Valquiria Garcia
Id: 45
Edad: 33
31> El visitante con id 25 se removio del grupo.
32> Visitante Zenobia Gomez
Id: 7
Edad: 16
Visitante Casimira Lopez
Id: 15
Edad: 35
Visitante Zafiro Martinez
Id: 21
Edad: 42
Visitante Valquiria Garcia
Id: 45
Edad: 33
33> Grupo liberado con exito.
34> Fin.
esa es mi salida
En respuesta a Enzo Rodolfo Noni Perez

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Nicolas Ron Calvo -
No sé que puedo estar haciendo mal, pero intento de todas maneras, por aquí y por allá, con funciones auxiliares y sin ellas, sin embargo siempre me da algún problema con la eliminación de un nodo y no se por que :( . Cualquier ayuda es bienvenida, estoy perdiendo todo el tiempo en esta y ya no doy más
En respuesta a Nicolas Ron Calvo

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Fã‰Lix Michel Jure Altuna -
Estoy en la misma,no estoy seguro de entender la ayuda que nos dió Pablo.
En respuesta a Fã‰Lix Michel Jure Altuna

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Pablo Andres Balliva Costa -

Lamento no haber podido lograr la claridad suficiente, jeje.

Creo que hemos agotado esta instancia de intercambio virtual y público entre estudiantes. Si tienen posibilidad vayan a alguna de las clases de consulta e intercambien cara a cara con docentes y otros compañeros.

¡Éxitos!

En respuesta a Fã‰Lix Michel Jure Altuna

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Gonzalo Javier Diaz Ferreira -
Felix, Nicolás

Logré sacarlo (recorriendo ejemplos del codigo y entrando en la recursión a papel y lapiz).

El problema está en el último caso, en el "else" que lleva al máximo nodo del árbol izquierdo. (Cómo dijo Pablo)
Es ahí donde dónde debería liberarse, y es importante dejar el puntero en NULL.  Recorran algunos ejemplos a mano, porque seguramente dependa de sus código.

Pero en mi caso, fue la solución . 

En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Lautaro Gabriel Piedra Vallejo -

Buenas, esto teniendo problemas con la liberación de memoria del visitante. Esto lo hago con liberarTVisitante. Si no lo pongo, la salida es igual a la esperada pero obviamente queda la memoria sin liberar. El problema es que al ponerlo me arroja un montón de errores referidos a distintos procedimientos, todos del estilo "Address 0x4de35a0 is 0 bytes inside a block of size 208 free'd" o "Invalid read of size (1 y 4)". No veo manera de liberar esa memoria de otra forma, y no se me ocurre qué puede estar pasando. Si alguno me puede orientar les agradezco!

En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Silvina Jaquelin Ferreira Pereira -
Estoy teniendo problemas con el código por exceder el tiempo de ejecución, He intentado con recursivo, while, ifs de todas las formas que se me ocurrieron para remover un nodo y no logro reducirlo.
En respuesta a Silvina Jaquelin Ferreira Pereira

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Manuel Freire -
Hola,

Se espera que las soluciones sean recursivas ¿Te fijaste que estés haciendo una recorrida eficiente? ¿Es posible que en todos los casos estés recorriendo todo el árbol? Acordate que los nodos están ordenados

Saludos!
Manuel
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Francisco Scarrone Braz Da Luz -
Buenas.
Mis salidas con el caso de prueba se contradicen, ya que me dice que el maximo id es 40 pero luego dice que no pertenece al grupo. Estoy hace tiempo trancado con esta parte y no logro solucionarlo.
Adjunto Screenshot 2024-04-15 140932.png
En respuesta a Francisco Scarrone Braz Da Luz

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Manuel Freire -
Hola,

La salida parece indicar que la búsqueda para remover no es consistente con el cálculo de mayor id ¿es posible que tengas ese valor guardado en la estructura en vez de buscar cada vez? En ese caso cuando remuevas deberías actualizar.

Saludos!
Manuel
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Lucia Gilmet Prado -
Buenas, estoy perdiendo memoria, miramos las funciones con un profe de práctico y no encontramos errores. No se como solucionarlo.
error
En respuesta a Lucia Gilmet Prado

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Pablo Andres Balliva Costa -

Según parece, para remover un visitante usás copiarTVisitante dentro de la recursión. Fijate bien a qué asignás esa copia, porque es parte de la memoria que estás perdiendo. No me queda claro si el segundo record está relacionado con el primero, pero por las dudas en crearTVisitante fijate que el resultado del new lo estés asignando correctamente.

En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Ana Carina Puga Viera -

¡Buenas!

Estoy logrando la salida esperada, pero tengo alguna fuga de memoria en algún lugar. Busco y busco, pero no encuentro el error. Help!

Salida del test grupoABB4-maxid-remove

En respuesta a Ana Carina Puga Viera

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Federico Rivero -
Hola Ana!

Si te da la salida correcta entonces es probable que no estés llamando a liberarTVisitante... puede ser?

Saludos,
Federico
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Christian Nicolas Donaley Gonzalez -
Hola Federico, como estas?
Estoy teniendo un problema muy parecido despues que creo las funciones de: TVisitante maxIdTVisitanteTGrupoABB(TGrupoABB grupoABB) y void removerTVisitanteTGrupoABB(TGrupoABB &grupoABB, int idVisitante).

Me esta dando la siguiente perdida de memoria:
> ==56202== 832 bytes in 4 blocks are definitely lost in loss record 1 of 1
> ==56202== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==56202== by 0x10B8A4: crearTVisitante(int, char const*, char const*, int) (visitante.cpp:11)
> ==56202== by 0x10A19E: main_crearVisitante(rep_visitante*&) (principal.cpp:343)
> ==56202== by 0x10953D: main (principal.cpp:163)
> ==56202==

he intentado agregarle liberarTVisitante, pero el problema esta en que me da un "Tamaño excedido", no estoy encontrando en realidad donde habría que involucrar esta función, o qué es lo que tendría que liberar.
Entiendo que la liberación debería ser en el que removemos un visitante, pero no estoy viendo el problema.
En respuesta a Christian Nicolas Donaley Gonzalez

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Federico Rivero -
Hola Christian!

"Tamaño excedido" es un error que da el makefile cuando la salida generada es demasiado grande, probablemente el programa te quede en loop infinito. Remover TVisitante también tiene que liberar la memoria asociada al visitante, como bien comentás.

Saludos,
Federico
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Mikaela Victoria Kijuto Gonzalez -
Hola, al hacer el make-t me sale error, ya que las salidas estan una linea corrida de la esperada.
corriendo linea por linea mi programa realiza lo mismo que el .out, pero en el .out aparece un maxid que en el .in no se invoca. puede ser?
el .out figura esto en la linea 28:

y en el .in figura esto:

aqui podemos ver mi salida, que se comporta con lo solicitado en el .in:

En respuesta a Mikaela Victoria Kijuto Gonzalez

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Pablo Andres Balliva Costa -
Debés haberlo modificado sin darte cuenta, porque el grupoABB4-maxid-remover.in de todas las versiones de la letra que se han subido tiene maxIdGrupoABB en la línea 28.
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Thiago Gonzalez Moreira -

Buenas, estoy teniendo un error al eliminar el visitante con id 21, el visitante se elimina pero los datos del próximo nodo quedan corruptos o vacios.
Hice el procedimiento como se ve en el teórico de estructuras arborescentes página 40 y utilizando una función auxiliar para liberar un nodo de manera individual.

Adjunto Sin título.png
En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Martin Gonzalez Blasco -

Buenas, tengo un problema con la funcion removerTVisitanteTGrupoABB.

el caso de prueba va bien hasta la linea 14, donde se pide remover el 21 del arbol 7, 21, 15, 40. La funcion del maximo id esta funcionando bien.

El error que me sale es "El visitante con id 21 no se puede remover porque NO pertenece al grupo", sin embargo al hacerle print con imprimirGrupoABB si sale el 21.

Alguna idea de donde puede estar el error? revise minuciosamente la funcion en general y con este caso particular y no encuentro error. Es similar a la que se dio en el practico, adaptada a este contexto

En respuesta a Federico Rivero

Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB

de Lucia Lima Izmendi -
Buenas.
En el test grupoABB4-maxId-remover, el .sal me da exactamente igual que como está el .out, pero el diff en vez de estar vacío tiene el contenido de ambos archivos.
Pensé que podría ser un error de memoria, pero al correr con valgrind mi salida es esta:
[lucia.lima@pcunix94 tarea2]$ valgrind ./principal < test/grupoABB4-maxid-remover.in
==79180== Memcheck, a memory error detector
==79180== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==79180== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info
==79180== Command: ./principal
==79180==
Bienvenido al programa principal de ArteProg. Por favor ingrese su comando:
1> El grupoABB ha sido creado de forma exitosa.
2> Visitante creadox de forma exitosa.
3> Se ha agregado el visitante al grupo de forma exitosa.
4> El mayor id en el grupo es 7.
5> Visitante creadox de forma exitosa.
6> Se ha agregado el visitante al grupo de forma exitosa.
7> El mayor id en el grupo es 21.
8> Visitante creadox de forma exitosa.
9> Se ha agregado el visitante al grupo de forma exitosa.
10> El mayor id en el grupo es 21.
11> Visitante creadox de forma exitosa.
12> Se ha agregado el visitante al grupo de forma exitosa.
13> El mayor id en el grupo es 40.
14> El visitante con id 21 se removio del grupo.
15> El mayor id en el grupo es 40.
16> El visitante con id 40 se removio del grupo.
17> El mayor id en el grupo es 15.
18> Visitante creadox de forma exitosa.
19> Se ha agregado el visitante al grupo de forma exitosa.
20> Visitante creadox de forma exitosa.
21> Se ha agregado el visitante al grupo de forma exitosa.
22> Visitante creadox de forma exitosa.
23> Se ha agregado el visitante al grupo de forma exitosa.
24> El mayor id en el grupo es 40.
25> Visitante creadox de forma exitosa.
26> Se ha agregado el visitante al grupo de forma exitosa.
27> Visitante Zenobia Gomez
Id: 7
Edad: 16
Visitante Valquiria Gomez
Id: 15
Edad: 35
Visitante Casimira Lopez
Id: 21
Edad: 42
Visitante Valquiria Gonzalez
Id: 25
Edad: 19
Visitante Zafiro Martinez
Id: 40
Edad: 20
Visitante Valquiria Garcia
Id: 45
Edad: 33
28> El mayor id en el grupo es 45.
29> El visitante con id 40 se removio del grupo.
30> Visitante Zenobia Gomez
Id: 7
Edad: 16
Visitante Valquiria Gomez
Id: 15
Edad: 35
Visitante Casimira Lopez
Id: 21
Edad: 42
Visitante Valquiria Gonzalez
Id: 25
Edad: 19
Visitante Valquiria Garcia
Id: 45
Edad: 33
31> El visitante con id 25 se removio del grupo.
32> Visitante Zenobia Gomez
Id: 7
Edad: 16
Visitante Valquiria Gomez
Id: 15
Edad: 35
Visitante Casimira Lopez
Id: 21
Edad: 42
Visitante Valquiria Garcia
Id: 45
Edad: 33
33> Grupo liberado con exito.
34> Fin.
==79180==
==79180== HEAP SUMMARY:
==79180== in use at exit: 0 bytes in 0 blocks
==79180== total heap usage: 22 allocs, 22 frees, 85,424 bytes allocated
==79180==
==79180== All heap blocks were freed -- no leaks are possible
==79180==
==79180== For lists of detected and suppressed errors, rerun with: -s
==79180== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)