.
2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Dejo el mensaje de error porque no estoy pudiendo ver que es lo que esta mal en ambos casos.
Invalid read of size 4
==78378== at 0x403657: idTPerro(rep_perro*) (perro.cpp:34)
==78378== by 0x403AF5: pertenecePerroTPersona(rep_persona*, int) (persona.cpp:96)
==78378== by 0x40264F: main_pertenecePerroPersona(rep_persona*) (principal.cpp:508)
==78378== by 0x4016F3: main (principal.cpp:216)
==78378== Address 0x4e0d3d8 is 152 bytes inside a block of size 176 free'd
==78378== at 0x4845BB8: operator delete(void*, unsigned long) (vg_replace_malloc.c:1181)
==78378== by 0x40363C: liberarTPerro(rep_perro*&) (perro.cpp:29)
==78378== by 0x402037: main_liberarPerro(rep_perro*&) (principal.cpp:390)
==78378== by 0x40140A: main (principal.cpp:175)
==78378== Block was alloc'd at
==78378== at 0x4841FEC: operator new(unsigned long) (vg_replace_malloc.c:487)
==78378== by 0x403598: crearTPerro(int, char const*, unsigned int, unsigned int, char const*, rep_fecha*) (perro.cpp:16)
==78378== by 0x401FDF: main_crearPerro(rep_perro*&, rep_fecha*&) (principal.cpp:384)
==78378== by 0x4013E1: main (principal.cpp:173)
==78378==
==78378== Invalid read of size 4
==78378== at 0x4036CC: imprimirTPerro(rep_perro*) (perro.cpp:59)
==78378== by 0x403960: imprimirTPersona(rep_persona*) (persona.cpp:47)
==78378== by 0x40254E: main_imprimirPersona(rep_persona*) (principal.cpp:487)
==78378== by 0x401671: main (principal.cpp:210)
==78378== Address 0x4e0d3dc is 156 bytes inside a block of size 176 free'd
==78378== at 0x4845BB8: operator delete(void*, unsigned long) (vg_replace_malloc.c:1181)
==78378== by 0x40363C: liberarTPerro(rep_perro*&) (perro.cpp:29)
==78378== by 0x402037: main_liberarPerro(rep_perro*&) (principal.cpp:390)
==78378== by 0x40140A: main (principal.cpp:175)
==78378== Block was alloc'd at
==78378== at 0x4841FEC: operator new(unsigned long) (vg_replace_malloc.c:487)
==78378== by 0x403598: crearTPerro(int, char const*, unsigned int, unsigned int, char const*, rep_fecha*) (perro.cpp:16)
==78378== by 0x401FDF: main_crearPerro(rep_perro*&, rep_fecha*&) (principal.cpp:384)
==78378== by 0x4013E1: main (principal.cpp:173)
Esto sucede varias veces y cuando quito ambas funciones del codigo todo funciona perfectamente.
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
el error te está ocurriendo en el test persona2, y en el test1 te anda bien?
Estas creando una copia del perro al guardarla en persona?
Saludos.
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Resulta que me olvide de copiar el perro, muchas gracias
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Hice un .diff para ver si me devolvia algo mas o algo extraño que me ayude a ver el problema, pero evidentemente saca lo mismo que aparece en consola, o sea: nada, y no estoy pudiendo descifrar el error.
Obs: si corro los test como si fueran de tiempo (tt-persona1, tt-persona2) me devuelve "bien". Pero realmente no encontre donde se especifica eso en la tarea, que se tenga que hacer con esos test. Tambien me resulta raro que si son test de tiempo nadie haya tenido el mismo error siendo que no esta, al menos explicito, en la letra. Puede pasar que este ciego, y puede pasar que sea el unico que no sabia que estos test eran de tiempo, y puede tambien pasar que no sean de tiempo y tenga el codigo mal.
En fin, le doy vueltas pero no se que mas hacer, solo necesito saber si son test de tiempo y/o quÉ significa que solo devuelva "lo que debe ser" y nada mas. Gracias!
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Consulta ? en el caso de "peor caso" (Orden()) , perros.cpp y fecha se podrian modificar o hay que dejarlos asi como vienen de tarea1 ?
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Hola,
En principio, no hay necesidad de realizar cambios en perro.cpp y fecha.cpp.
Pero si lo necesitás podés hacerlos sin problema.
Saludos!
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Y, para los diff:
make test/salidas/persona1-crear-imprimir-liberar.diff
y
make test/salidas/persona2-crear-imprimir-perro-liberar.diff
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Respecto a lo del diff, no se debe utilizar el makefile para ejecutar diff. El comando diff se ejecuta desde la terminal primero poniendo la palabra diff y luego los dos archivos a comparar. Por ejemplo:
> diff test/persona1-crear-imprimir-liberar.out test/salidas/persona1-crear-imprimir-liberar.sal
Si la salida es vacía quiere decir que los dos son iguales.
Respecto a lo de que no te da bien la ejecución de los tests. La diferencia entre ejecutar con t- y tt- es que para los de tiempo no se ejecuta con valgrind. Si no te da bien al ejecutar con valgrind probablemente tengas un problema de memoria.
En todo caso, la forma más fácil de arreglarlo es ejecutando el test a mano y viendo cuál es la salida en la terminal. Si el problema se da sólo cuando utilizás valgrind podés ejecutarlo así:
> valgrind -q --leak-check=full ./principal
Saludos!
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Entiendo, e hice todo lo que me comenta. De hecho corrí los test a mano, línea por línea, usando
> ./principal
y también
> valgrind -q --leak-check=full ./principal
y no hay caso, todos me dan bien. Pero si corro los test con "make t" me devuelve, como dije anteriormente, "lo que está bien" (lo que va en .out).
Hice el .sal y salió vacío, usé el comando diff que me dió usted en consola y me devuelve lo mismo que el test. Ta raro, y no tengo mensajes de error en ningun lado como para saber de donde viene la falla.
Como verá, llevo varios dias con esto y sin solución, seguiré buscando pero realmente no comprendo.
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
En ese caso tu .sal seguramente esté vacío. Revisá eso por favor.
Saludos,
Federico
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Hola,
Si está vacío es muy probable que tu programa esté quedando en loop.
Te recomiendo ejecutar el caso de prueba comando por comando. Eso te va a permitir entender cuándo es que queda trancado.
saludos
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
35a36,42
> ==209798== 36 bytes in 3 blocks are definitely lost in loss record 1 of 1
> ==209798== at 0x4841FEC: operator new(unsigned long) (vg_replace_malloc.c:487)
> ==209798== by 0x403E11: crearTFecha(unsigned int, unsigned int, unsigned int) (fecha.cpp:8)
> ==209798== by 0x401D03: leerFecha(rep_fecha*&) (principal.cpp:321)
> ==209798== by 0x401D5D: main_crearFecha(rep_fecha*&) (principal.cpp:327)
> ==209798== by 0x4012EB: main (principal.cpp:160)
> ==209798==
Tanto mi out como sal son iguales de no ser por ese error que me da al final, revise en el fecha donde me dice que pierdo memoria pero esta tal y como lo hice en la tarea 1 donde esta bien implementado, no logro dar con una solucion, cuando hago el make testing me da tanto el test 1 como el test 3 como validos me falla unicamente ese.
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Lo que te esta marcando el error ahi , es sobre TFecha no quedo liberada, tendrias que ver si estas liberando esa TFecha que no se si es la de adopcion o la de persona.
saludos Daniel.
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona
((( vale la pena que lo aprendas a usar si no lo conoces )))
el Makefile ya esta configurado para poder debugear con el gdb.