2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Federico Rivero -
Número de respuestas: 18
En respuesta a Federico Rivero

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Joaquin Nahuel Nuñez Rosano -
Buenas, por alguna razon no me da errores en imprimirTPerro del Perro.cpp, tiene tambien problemas con idTPerro de perro.cpp.
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.
En respuesta a Joaquin Nahuel Nuñez Rosano

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Ignacio Remersaro Coronel -
Buenas,

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.
En respuesta a Federico Rivero

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Alvaro Gutierrez Souza -
Buenas noches, resulta que por algun motivo tanto en test persona1 como en persona2 mi programa no devuelve nada. Es decir, me devuelve solo lo que "deberia devolver" pero pareciera que no ejecuta nada. Cuando lo hago manual hace todo excelente.
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!
En respuesta a Alvaro Gutierrez Souza

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Alberto Daniel Sanchez Latronico -
Hola Federico,
Consulta ? en el caso de "peor caso" (Orden()) , perros.cpp y fecha se podrian modificar o hay que dejarlos asi como vienen de tarea1 ?
En respuesta a Alberto Daniel Sanchez Latronico

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Guillermo Dufort -

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!

En respuesta a Alvaro Gutierrez Souza

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Ignacio Remersaro Coronel -
No me está quedando claro, cuándo decís que el programa no devuelve nada, qué comando para hacer la prueba estas utilizando?
En respuesta a Ignacio Remersaro Coronel

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Alvaro Gutierrez Souza -
Comando: make t-persona1-crear-imprimir-liberar y make t-persona2-crear-imprimir-perro-liberar
Y, para los diff:
make test/salidas/persona1-crear-imprimir-liberar.diff 
y
make test/salidas/persona2-crear-imprimir-perro-liberar.diff
En respuesta a Alvaro Gutierrez Souza

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Guillermo Dufort -
Hola Álvaro,

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!
En respuesta a Guillermo Dufort

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Alvaro Gutierrez Souza -

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.

En respuesta a Federico Rivero

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Luka Federico Miguez Apai -
Buenas, estoy teniendo un problema con el caso de prueba persona2-crear-imprimir-perro-liberar. Cuando hago make t- me devuelve "1, 35d0", después exactamente lo que dice en el .out, y nada más. O sea, no aparece una salida esperada versus una salida obtenida, solo aparece la esperada. Qué puede ser eso? Gracias
En respuesta a Luka Federico Miguez Apai

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Federico Rivero -
Hola Luka,

En ese caso tu .sal seguramente esté vacío. Revisá eso por favor.

Saludos,
Federico
En respuesta a Federico Rivero

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Luka Federico Miguez Apai -
Sí, es eso. Cómo se interpreta eso y cómo podría solucionarlo? Muchas gracias
En respuesta a Luka Federico Miguez Apai

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Guillermo Dufort -

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

En respuesta a Federico Rivero

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Johann Ivan Fleitas Castillo -
Hola buenas, tengo un problema con el test 2 de persona donde me slata el siguiente error
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.
En respuesta a Johann Ivan Fleitas Castillo

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Alberto Daniel Sanchez Latronico -
Hola , Johann
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.
En respuesta a Alberto Daniel Sanchez Latronico

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Johann Ivan Fleitas Castillo -
si eso lo se lo vi pero el liberarTFecha funciona perfectamente
En respuesta a Johann Ivan Fleitas Castillo

Re: 2. Implemente las funciones agregarPerroTPersona, pertenecePerroTPersona, y cantidadPerrosTPersona

de Alberto Daniel Sanchez Latronico -
no se si sabes usar el gdb , te ayudaria mucho a encontrar en donde esta fallando.
((( vale la pena que lo aprendas a usar si no lo conoces )))
el Makefile ya esta configurado para poder debugear con el gdb.