.
4. Implemente la función removerVacunaTAGFichaVacunacion
de Federico Rivero -
Número de respuestas: 7
En respuesta a Federico Rivero
Re: 4. Implemente la función removerVacunaTAGFichaVacunacion
Hola buenas, estoy teniendo un problema con esta función.
> ==6419== Invalid read of size 4
> ==6419== at 0x10FB98: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:97)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CC44: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1113)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e80 is 0 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FBAA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CC44: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1113)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e88 is 8 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FBC3: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CC44: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1113)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e90 is 16 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 4
> ==6419== at 0x10FA8F: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:63)
> ==6419== by 0x10FABE: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:66)
> ==6419== by 0x10FB06: imprimirTAGFichaVacunacion(rep_agFichaVacunacion*) (agFichaVacunacion.cpp:78)
> ==6419== by 0x10CAB7: main_imprimirAGFichaVacunacion(rep_agFichaVacunacion*) (principal.cpp:1081)
> ==6419== by 0x10A1C3: main (principal.cpp:396)
> ==6419== Address 0x4dd9e80 is 0 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FAB1: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:66)
> ==6419== by 0x10FABE: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:66)
> ==6419== by 0x10FB06: imprimirTAGFichaVacunacion(rep_agFichaVacunacion*) (agFichaVacunacion.cpp:78)
> ==6419== by 0x10CAB7: main_imprimirAGFichaVacunacion(rep_agFichaVacunacion*) (principal.cpp:1081)
> ==6419== by 0x10A1C3: main (principal.cpp:396)
> ==6419== Address 0x4dd9e88 is 8 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FAC3: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:69)
> ==6419== by 0x10FABE: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:66)
> ==6419== by 0x10FB06: imprimirTAGFichaVacunacion(rep_agFichaVacunacion*) (agFichaVacunacion.cpp:78)
> ==6419== by 0x10CAB7: main_imprimirAGFichaVacunacion(rep_agFichaVacunacion*) (principal.cpp:1081)
> ==6419== by 0x10A1C3: main (principal.cpp:396)
> ==6419== Address 0x4dd9e90 is 16 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 4
> ==6419== at 0x10FB98: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:97)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CBF3: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1111)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e80 is 0 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FBAA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CBF3: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1111)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e88 is 8 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FBC3: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CBF3: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1111)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e90 is 16 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> principal: principal.cpp:1111: void main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&): Assertion `existeVacunaTAGFichaVacunacion(fichaVacunacion, codVacuna)' failed.
> timeout: the monitored command dumped core
> Aborted
que por lo que entiendo esta intentando acceder a memoria que fue borrada ya por BorrarNodos, llevo desde ayer con este error y no consigo solucionarlo.
por si les sirve les explico que fue lo que hice en esta función: verifique que el puntero que me pasan sea != NULL y luego verifico si el codVacuna esta en el nodo actual,si lo es creo un puntero aux que apunte a este y el puntero fichaVacunacion le asigno fichaVacunacion->sH, luego llamo a una funcion auxiliar que borra al nodo y sus hijos, en caso de que el nodo actual no sea el de codVacuna aplico recursion en pH y luego en sH. En borrarNodos me aseguro de hacer delete y luego asignar NULL pero el problema sigue.
> ==6419== Invalid read of size 4
> ==6419== at 0x10FB98: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:97)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CC44: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1113)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e80 is 0 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FBAA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CC44: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1113)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e88 is 8 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FBC3: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CC44: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1113)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e90 is 16 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 4
> ==6419== at 0x10FA8F: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:63)
> ==6419== by 0x10FABE: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:66)
> ==6419== by 0x10FB06: imprimirTAGFichaVacunacion(rep_agFichaVacunacion*) (agFichaVacunacion.cpp:78)
> ==6419== by 0x10CAB7: main_imprimirAGFichaVacunacion(rep_agFichaVacunacion*) (principal.cpp:1081)
> ==6419== by 0x10A1C3: main (principal.cpp:396)
> ==6419== Address 0x4dd9e80 is 0 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FAB1: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:66)
> ==6419== by 0x10FABE: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:66)
> ==6419== by 0x10FB06: imprimirTAGFichaVacunacion(rep_agFichaVacunacion*) (agFichaVacunacion.cpp:78)
> ==6419== by 0x10CAB7: main_imprimirAGFichaVacunacion(rep_agFichaVacunacion*) (principal.cpp:1081)
> ==6419== by 0x10A1C3: main (principal.cpp:396)
> ==6419== Address 0x4dd9e88 is 8 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FAC3: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:69)
> ==6419== by 0x10FABE: imprimirArbolGeneral(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:66)
> ==6419== by 0x10FB06: imprimirTAGFichaVacunacion(rep_agFichaVacunacion*) (agFichaVacunacion.cpp:78)
> ==6419== by 0x10CAB7: main_imprimirAGFichaVacunacion(rep_agFichaVacunacion*) (principal.cpp:1081)
> ==6419== by 0x10A1C3: main (principal.cpp:396)
> ==6419== Address 0x4dd9e90 is 16 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 4
> ==6419== at 0x10FB98: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:97)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CBF3: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1111)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e80 is 0 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FBAA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CBF3: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1111)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e88 is 8 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> ==6419== Invalid read of size 8
> ==6419== at 0x10FBC3: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10FBBA: existeVacunaTAGFichaVacunacion(rep_agFichaVacunacion*, int) (agFichaVacunacion.cpp:101)
> ==6419== by 0x10CBF3: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1111)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Address 0x4dd9e90 is 16 bytes inside a block of size 24 free'd
> ==6419== at 0x484BB6F: operator delete(void*, unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10FD01: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:138)
> ==6419== by 0x10FCE8: BorrarNodos(rep_agFichaVacunacion*&) (agFichaVacunacion.cpp:137)
> ==6419== by 0x10FD74: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:154)
> ==6419== by 0x10FD8E: removerVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int) (agFichaVacunacion.cpp:158)
> ==6419== by 0x10CC30: main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1112)
> ==6419== by 0x10A2B8: main (principal.cpp:406)
> ==6419== Block was alloc'd at
> ==6419== at 0x4849013: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==6419== by 0x10F9D5: insertarVacunaTAGFichaVacunacion(rep_agFichaVacunacion*&, int, int) (agFichaVacunacion.cpp:37)
> ==6419== by 0x10CA7C: main_insertarVacunaAGFichaVacunacion(rep_agFichaVacunacion*&) (principal.cpp:1076)
> ==6419== by 0x10A192: main (principal.cpp:394)
> ==6419==
> principal: principal.cpp:1111: void main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&): Assertion `existeVacunaTAGFichaVacunacion(fichaVacunacion, codVacuna)' failed.
> timeout: the monitored command dumped core
> Aborted
que por lo que entiendo esta intentando acceder a memoria que fue borrada ya por BorrarNodos, llevo desde ayer con este error y no consigo solucionarlo.
por si les sirve les explico que fue lo que hice en esta función: verifique que el puntero que me pasan sea != NULL y luego verifico si el codVacuna esta en el nodo actual,si lo es creo un puntero aux que apunte a este y el puntero fichaVacunacion le asigno fichaVacunacion->sH, luego llamo a una funcion auxiliar que borra al nodo y sus hijos, en caso de que el nodo actual no sea el de codVacuna aplico recursion en pH y luego en sH. En borrarNodos me aseguro de hacer delete y luego asignar NULL pero el problema sigue.
En respuesta a Santiago Noel Pombo Fontes
Re: 4. Implemente la función removerVacunaTAGFichaVacunacion
de Federico Rivero -
Hola Santiago,
Por tu explicación me parece que el borrar debe estar borrando aux, sus hijos, y también sus hermanos. Y los hermanos de aux son nodos que no tenés que borrar.
Por tu explicación me parece que el borrar debe estar borrando aux, sus hijos, y también sus hermanos. Y los hermanos de aux son nodos que no tenés que borrar.
Fijate si es eso.
Saludos,
Federico
En respuesta a Federico Rivero
Re: 4. Implemente la función removerVacunaTAGFichaVacunacion
Era eso si, gracias profe :)
En respuesta a Federico Rivero
Re: 4. Implemente la función removerVacunaTAGFichaVacunacion
de Renzo Cirullo Soria -
Hola buenas, esta función me está dando este error y no logro identificarlo:
> principal: principal.cpp:1111: void main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&): Assertion `existeVacunaTAGFichaVacunacion(fichaVacunacion, codVacuna)' failed.
> timeout: the monitored command dumped core
> principal: principal.cpp:1111: void main_removerVacunaAGFichaVacunacion(rep_agFichaVacunacion*&): Assertion `existeVacunaTAGFichaVacunacion(fichaVacunacion, codVacuna)' failed.
> timeout: the monitored command dumped core
En respuesta a Renzo Cirullo Soria
Re: 4. Implemente la función removerVacunaTAGFichaVacunacion
Hola Renzo,
qué más te está retornando el test, te esta ocurriendo a principio? Puede que el error surja de las funciones anteriores, los test los tenes bien?
qué más te está retornando el test, te esta ocurriendo a principio? Puede que el error surja de las funciones anteriores, los test los tenes bien?
En respuesta a Ignacio Remersaro Coronel
Re: 4. Implemente la función removerVacunaTAGFichaVacunacion
de Renzo Cirullo Soria -
El test solo retorna eso y todos los test anteriores están bien
En respuesta a Renzo Cirullo Soria
Re: 4. Implemente la función removerVacunaTAGFichaVacunacion
de Federico Rivero -
hola Renzo,
En la línea 1111 del principal hay un assert que lo que busca es asegurarse que la vacuna que se va a remover del principal efectivamente esté en el árbol. Se usa la función existe. Si ese assert te da error se me ocurren 3 razones posibles:
1) Porque la función 'existe' tiene algún problema
2) Porque sin querer cambiaste algún caso de prueba (si por ejemplo agregaste un número en algún id)
3) Porque en la función 'remover' removés algún nodo adicional
Para ver los números 1 y 3, podés correr a mano y ejecutar imprimir entre paso y paso para estar seguro de que las funciones están haciendo lo que deben.
Saludos,
Federico
En la línea 1111 del principal hay un assert que lo que busca es asegurarse que la vacuna que se va a remover del principal efectivamente esté en el árbol. Se usa la función existe. Si ese assert te da error se me ocurren 3 razones posibles:
1) Porque la función 'existe' tiene algún problema
2) Porque sin querer cambiaste algún caso de prueba (si por ejemplo agregaste un número en algún id)
3) Porque en la función 'remover' removés algún nodo adicional
Para ver los números 1 y 3, podés correr a mano y ejecutar imprimir entre paso y paso para estar seguro de que las funciones están haciendo lo que deben.
Saludos,
Federico