.
3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
de Alejandro Blanco -
Número de respuestas: 14
En respuesta a Alejandro Blanco
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Buenas noches, al probar la funcion imprimirNombreYApellido obtengo un resultado de la siguiente forma:
>El nombre de la persona es: ?}
>El apellido de la persona es: Doe
El nombre "?}" varía cada ejecución independientemente de la entrada. Por el comportamiento calculo que esta accediendo a un espacio de memoria incorrecto, pero no entendería por qué, sobre todo cuando la implementación es análoga a la del apellido.
Este es el resultado de ejecutar el código con valgrind: https://pastebin.com/HTYAN5FX
¿Cuál puede ser el motivo de este error?
>El nombre de la persona es: ?}
>El apellido de la persona es: Doe
El nombre "?}" varía cada ejecución independientemente de la entrada. Por el comportamiento calculo que esta accediendo a un espacio de memoria incorrecto, pero no entendería por qué, sobre todo cuando la implementación es análoga a la del apellido.
Este es el resultado de ejecutar el código con valgrind: https://pastebin.com/HTYAN5FX
¿Cuál puede ser el motivo de este error?
En respuesta a Guillermo Wajner Barrios
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Tengo exactamente el mismo problema
En respuesta a Guillermo Wajner Barrios
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Pude resolverlo. Viste que usas una función strpcy (o algo así). Bueno, volve a usar la misma función en las funciones que te retornan el nombre y el apellido nombrePersona y apellidoPersona. Con eso se debería solucionar el error.
En respuesta a Alejandro Blanco
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Buenos días, no termino de entender qué se supone que haga en nombrePersona y apellidoPersona, porque pide una función que retorne el nombre/apellido de la persona, sin embargo es un procedimiento y me da una persona y un nombre, que no es pasado por referencia.
Entonces si asumo que tengo que devolverlo en un return, ¿cuál de los dos retorno y por qué me dan más info que supuestamente sería innecesaria?
Entonces si asumo que tengo que devolverlo en un return, ¿cuál de los dos retorno y por qué me dan más info que supuestamente sería innecesaria?
En respuesta a Agustina Latorre Jauregui
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Yo tengo la misma duda
En respuesta a Agustina Latorre Jauregui
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
de Alejandro Blanco -
Agustina.
Los procedimientos nombrePersona y apellidoPersona reciben como parámetro una variable del tipo persona y una segunda que es un array of char para "devolver" el nombre o apellido de la persona. En realidad el segundo parámetro es un puntero.
Porque? Esto se debe a que en C y C++ el nombre de un arreglo es en realidad un puntero al primer elemento.
Si quieren leer un poco más de esto, recomiendo que busquen documentación de C/C++ sobre la relación de punteros y arreglos. Si tienen el libro "The C Programming Language" de Kernighan & Ritchie, se describe la relación de punteros y arreglos en el capitulo 5, Pointer and Arrays (5.3, Pointers and Arrays).
En definitiva, el 2do parámetro de estas funciones son punteros a char.
Espero que ahora quede un poco más claro.
Saludos
Alejandro B
Los procedimientos nombrePersona y apellidoPersona reciben como parámetro una variable del tipo persona y una segunda que es un array of char para "devolver" el nombre o apellido de la persona. En realidad el segundo parámetro es un puntero.
Porque? Esto se debe a que en C y C++ el nombre de un arreglo es en realidad un puntero al primer elemento.
Si quieren leer un poco más de esto, recomiendo que busquen documentación de C/C++ sobre la relación de punteros y arreglos. Si tienen el libro "The C Programming Language" de Kernighan & Ritchie, se describe la relación de punteros y arreglos en el capitulo 5, Pointer and Arrays (5.3, Pointers and Arrays).
En definitiva, el 2do parámetro de estas funciones son punteros a char.
Espero que ahora quede un poco más claro.
Saludos
Alejandro B
En respuesta a Alejandro Blanco
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Los procedimientos nombrePersona y apellidoPersona son del tipo void por lo que no retornan ningún valor. A su vez, el cabezal proporcionado para ambos procedimientos pasan por valor el parámetro nombre, por lo que no existe forma de que se retorne algo (ni como función ni por referencia).
Propongo que la intención era algo del estilo:
void nombrePersona(TPersona persona, char &nombre) {
[iteración que asigna carácter por carácter del parámetro nombre del de la persona a nombre]
}
Propongo que la intención era algo del estilo:
void nombrePersona(TPersona persona, char &nombre) {
[iteración que asigna carácter por carácter del parámetro nombre del de la persona a nombre]
}
De esta forma, pasando por referencia, la variable nombre del principal.cpp queda con el valor del nombre de la persona. Sin embargo, esto implica que hay que modificar el principal.cpp para que cuando se llame esta función sea del estilo nombrePersona(persona, nombre[0]); indicando que se pasa como parámetro el primer carácter del arreglo nombre.
¿Está permitido modificar los cabezales de la función y el principal.cpp? En caso de que no, ¿cómo puede solucionarse?
En respuesta a Alan Joskowicz Fidalgo
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
de Alejandro Blanco -
Alan.
No, fijate mi respuesta a Ezequiel y Agustina (https://eva.fing.edu.uy/mod/forum/discuss.php?d=300679#p665244)
Saludos
Alejandro B
No, fijate mi respuesta a Ezequiel y Agustina (https://eva.fing.edu.uy/mod/forum/discuss.php?d=300679#p665244)
Saludos
Alejandro B
En respuesta a Alejandro Blanco
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Buenas tardes,
me sucede algo similar a los demás compañeros.
el nombre aparece como una serie de simbolos, mientras que el apellido aparece correcto, a pesar que utilizo el mismo código para ambos:
En respuesta a Fernando Javier Acuña Gomez
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
de Alejandro Blanco -
Fernando.
Estas haciendo mal la copia o está mal inicializada la variable persona
Saludos
Alejandro B
Estas haciendo mal la copia o está mal inicializada la variable persona
Saludos
Alejandro B
En respuesta a Alejandro Blanco
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Buenas tardes, me está generando este error de memoria. Según entiendo el problema se genera ya que se solicita memoria para crear una fecha pero luego se finaliza el programa sin liberar la memoria solicitada para la fecha, sin embargo sí se libera la memoria solicitada para la persona. Hay algún detalle que pasé por alto? Gracias.
En respuesta a Máximo Timoteo Piccirillo Malanga
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
de Alejandro Blanco -
Máximo.
EL problema parece estar en la implementación de liberarTpersona. Fijate si estas liberando correctamente la memoria de la fecha de nacimiento de la persona y la memoria usada para almacenar la info en persona
Saludos
Alejandro B
EL problema parece estar en la implementación de liberarTpersona. Fijate si estas liberando correctamente la memoria de la fecha de nacimiento de la persona y la memoria usada para almacenar la info en persona
Saludos
Alejandro B
En respuesta a Alejandro Blanco
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
de Roberto Hernández -
Liberar la memoria usada para almacenar la info en persona sería borrar los dos arreglos de 'char' que contienen el nombre y el apellido? Es eso? En caso de que sí, cómo se hace?
En respuesta a Roberto Hernández
Re: 3. Implementar las funciones nombrePersona, apellidoPersonay liberarTPersona
Hola, Roberto.
No, eso no es necesario, porque se borra al borrar la variable persona.
Solo tenés que liberar lo apuntado por el campo fecha de la persona (usar las funciones de TFecha), y luego alcanza con borrar la variable persona. (No olvidar al final poner la variable en NULL.)
No, eso no es necesario, porque se borra al borrar la variable persona.
Solo tenés que liberar lo apuntado por el campo fecha de la persona (usar las funciones de TFecha), y luego alcanza con borrar la variable persona. (No olvidar al final poner la variable en NULL.)