Dudas sobre el punto 5
5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Me suena a que la variable que almacena ese valor,está sin inicializarse en algún lugar (?)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/attachment/629726/Captura%20de%20pantalla%202024-04-05%20153022.png?forcedownload=1)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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:
==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)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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.-
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Efectivamente, descargué los materiales y se ve que borré sin querer un par de líneas.
Muchas gracias!
Saludos
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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==
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Estoy en exactamente el mismo problema. Idéntico.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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í .
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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é...
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Che sigo en la misma,alguna otra sugerencia? (ya me quitó demasiado tiempo esta función je). Gracias desde ya.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/attachment/630471/Captura%20de%20pantalla%20de%202024-04-10%2007-54-50.png?forcedownload=1)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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!
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
![](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/post/630679/image.png)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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!
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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!
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/attachment/631484/Screenshot%202024-04-15%20140932.png?forcedownload=1)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
![error](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/post/632206/Captura%20desde%202024-04-18%2014-47-30.png)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
¡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!
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Si te da la salida correcta entonces es probable que no estés llamando a liberarTVisitante... puede ser?
Saludos,
Federico
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
"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
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
![](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/post/632476/image.png)
el .out figura esto en la linea 28:
![](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/post/632476/image%20%281%29.png)
![](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/post/632476/image%20%282%29.png)
![](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/post/632476/image%20%283%29.png)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
grupoABB4-maxid-remover.in
de todas las versiones de la letra que se han subido tiene maxIdGrupoABB
en la línea 28.Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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](https://eva.fing.edu.uy/pluginfile.php/488286/mod_forum/attachment/632872/Sin%20t%C3%ADtulo.png?forcedownload=1)
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
Investigá en principal.cpp
cual es la condición que desencadena ese mensaje de error.
Re: 5. Implemente las funciones maxIdTVisitanteTGrupoABB y removerTVisitanteTGrupoABB
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)