Preguntas sobre la parte 2
2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Probablemente estés queriendo acceder a la representación de persona en el módulo grupo y por eso te esté dando ese error. Acordate que desde fuera del módulo solamente se puede acceder a las funciones y constantes especificadas en el header (.h).
Saludos!
Manuel
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Me podrían ayudar?
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Lo que pasa es que como bien dicen, grupo.h incluye a persona.h únicamente, por lo tanto a lo único que grupo tiene acceso es a las funciones que están declaradas en persona.h y los tipos que están ahí. No puede acceder directamente a los elementos dentro del struct persona porque estos están declarados en persona.cpp y no en persona.h. Por lo tanto deben resolver la implementación de grupo valiéndose de las funciones declaradas en persona.h.
Saludos,
Federico
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Buenas noches!!
Por qué me aparece este error después de agregar a 3 personas al grupo?
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Lo que mostrás parece ser un problema de implementación de la función de agregarAGrupo. Lo más probable es que al ingresar la tercer persona estés entrando en un caso que los dos agregar anteriores no hacen. Es difícil darte indicaciones particulares a partir de la salida de consola pero te recomiendo que hagas el flujo de ejecución en un papel y capaz ahí te das cuenta cuál es el caso que no estás contemplando.
Saludos!
Manuel
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
> ==7723== Use of uninitialised value of size 8
> ==7723== at 0x10A7F8: fechaNacimientoTPersona(rep_persona*) (persona.cpp:71)
> ==7723== by 0x10A97C: agregarAGrupo(rep_grupo*&, rep_persona*) (grupo.cpp:37)
> ==7723== by 0x109FEC: main_agregarAGrupo(rep_grupo*&, rep_persona*&) (principal.cpp:316)
> ==7723== by 0x109674: main (principal.cpp:151)
> ==7723==
> ==7723== Invalid read of size 8
> ==7723== at 0x10A7F8: fechaNacimientoTPersona(rep_persona*) (persona.cpp:71)
> ==7723== by 0x10A97C: agregarAGrupo(rep_grupo*&, rep_persona*) (grupo.cpp:37)
> ==7723== by 0x109FEC: main_agregarAGrupo(rep_grupo*&, rep_persona*&) (principal.cpp:316)
> ==7723== by 0x109674: main (principal.cpp:151)
> ==7723== Address 0xd0 is not stack'd, malloc'd or (recently) free'd
> ==7723==
> ==7723==
> ==7723== Process terminating with default action of signal 11 (SIGSEGV)
> ==7723== Access not within mapped region at address 0xD0
> ==7723== at 0x10A7F8: fechaNacimientoTPersona(rep_persona*) (persona.cpp:71)
> ==7723== by 0x10A97C: agregarAGrupo(rep_grupo*&, rep_persona*) (grupo.cpp:37)
> ==7723== by 0x109FEC: main_agregarAGrupo(rep_grupo*&, rep_persona*&) (principal.cpp:316)
> ==7723== by 0x109674: main (principal.cpp:151)
> ==7723== If you believe this happened as a result of a stack
> ==7723== overflow in your program's main thread (unlikely but
> ==7723== possible), you can try to increase the size of the
> ==7723== main thread stack using the --main-stacksize= flag.
> ==7723== The main thread stack size used in this run was 8388608.
> timeout: la orden monitorizada ha volcado un 'core'
> Segmentation fault
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Hola, pude solucionar.
Me parece que tenía un problema en la función de agregar personas a un grupo.
Tenía un error en el algoritmo al mover personas dentro de un grupo.
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
En la especificación de la función agregarAGrupo no se especifica cómo debe comportarse la función ante el intento de agregar a una persona con un número de cédula igual a la de alguien que ya pertenece al grupo. En este caso, ¿se puede asumir que la función no tiene efecto alguno?
Desde ya, muchas gracias.
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Buenas!
A mi me pasaba lo mismo y me volví loco mirando la función de liberación de la fecha,pero el error estaba en otro lado..revisá el algoritmo que efectivamente borra a las personas del grupo,mi error estaba en que empezaba fuera de un rango válido.
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Buenas, cuando ejecuto el test grupo2-agregar-imprimir valgrind me tira que tengo una fuga de memoria en la funcion crearTPersona, pero el test persona1-crear-imprimirnombre-librerar esta bien.
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Al ejecutar el caso manualmente, se rompe en el comando 7(2do agregarAGrupo). Entiendo que el problema está en esa función, pero lo que no me cierra es que la salida del programa (con el make) antes de mostrar los errores es idéntica a la salida esperada.
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Llega a imprimir algo? La escritura en archivo no es 100% secuencial. Es normal que si el programa da error y termina (como ese segmentation fault), no llegue a escribir en el archivo cosas que se ejecutaron algunas instrucciones antes con printf (los detalles del por qué lo vas a ver en Sistemas Operativos, 5to semestre).'
Saludos,
Federico
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Mi error estaba efectivamente en que accedía a indices no inicializados en la función agregarAGrupo... lo que me sorprendió fue que el caso de prueba con el make t-... daba los resultados esperados aun cuando accedía varias veces a estos indices sin inicializar.
Saludos, Valentin
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Hola Lautaro,
Estás liberando la memoria de la persona en la función liberarTGrupo? Fijate si puede venir por ahí el problema.
Saludos,
Federico
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
A mi me habia pasado algo similar y era porque no habia inicializado bien el struct despues de hacer el new para el grupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
0a1,5
> ==95989== Conditional jump or move depends on uninitialised value(s)
> ==95989== at 0x40261F: liberarTGrupo(rep_grupo*&) (grupo.cpp:72)
> ==95989== by 0x401C99: main_liberarGrupo(rep_grupo*&) (principal.cpp:328)
> ==95989== by 0x401531: main (principal.cpp:157)
> ==95989==
Al hacerlo manualmente sin valgrind no me salta ningun error. Cuando lo hago con valgrind si me salta ese mismo error en el paso liberarGrupo, sin embargo la memoria esta perfecta. Por lo que entiendo estoy usando una variable no inicializada, como podria ser querer acceder a un campo que es NULL. Sin embargo ya hice todos los if necesarios para no estar accediendo a ningun NULL o un arreglo con tope 0 (es decir, sin nada). Y en funcion de esto ultimo, toda la iteracion la estoy haciendo sobre valores que estan definidos
Gracias de antemano
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
El valgrind te dice que el problema está en grupo.cpp:72
, o sea, en la línea 72 de ese archivo. Fijate que puntero estás desreferenciando ahí (grupo->algo
) y vas a saber exactamente cual es la memoria que no inicializaste. (Ojo que puntero sin inicializar no es lo mismo que puntero NULL
.) Es probable que el problema se genere en otro archivo.
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
buenas tardes, el make, me tira esto y no se porque seria, puede que el struct este mal o porque?
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Gracias
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Disculpen si esto no estaba respondido. Se deben ordenar de menor a mayor las fechas, es decir, los más viejos (mayor edad) primero, los más jovenes después. Ante dudas similares y sobre todo para no trancarse, traten de usar las salidas de los archivos de prueba para deducir este tipo de respuestas!
Saludos,
Federico
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Gracias.
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Probablemente la variable grupo sea NULL. Fijate si tenés bien implementado el constructor!
(Y sí, el mensaje 'el grupo ha sido creado de forma exitosa es un poco confuso y optimista. Asume que 'crearGrupo' funciona correctamente)
Saludos,
Federico
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
El problema es que al crear el grupo por lo que entiendo sí o sí lo tengo que dejar apuntando a algo, por eso está apuntando a NULL (porque como está vacío al crearse todavía no apunta a ninguna persona).
Gracias
Re: 2. Implementar las funciones crearTGrupo, agregarAGrupo, imprimirTGrupo y liberarTGrupo
Es decir, el principal no sigue bien los lineamientos del curso :)
Saludos,
Federico