C/Visual C - Liberar memoria para una struct entera

 
Vista:

Liberar memoria para una struct entera

Publicado por Rubén (3 intervenciones) el 08/09/2002 21:39:47
Estoy intentando liberar memoria para una struct de la siguiente forma:

*agenda=(struct persona *)malloc(sizeof(struct persona));

En el código tengo declarado lo siguiente:

struct persona
{
char *nombre;
int telefono;
char *direccion;
};

void main()
{
struct persona *agenda;

Me gustaría saber en que me estoy equivocando y a poder ser porque me estoy equivocando o algún link de donde consultarlo ya que en todo sitio donde miré yo no encontré lo que buscaba. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Liberar memoria para una struct entera

Publicado por ismael (230 intervenciones) el 08/09/2002 22:02:17
Creo que hay cierte imprecisión en las declaraciones:
char *nombre es un punter a un caracter, no a una cadena
Debes emplear char nombre[50] o realizar reserva dinámica de memoria para 50 caracteres. Lo mismo para dirección
si quieres guardar un número de telefóno (9 dígitos) como valor int, creo que se producirá overflow (emplea datos ma´s amplios o tratalo como cadena de carateres.
Sslaudos
Ismael
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Liberar memoria para una struct entera

Publicado por chuidiang (677 intervenciones) el 09/09/2002 05:57:54
Ismael tiene razón en lo del número de teléfono. Debes tratarlo como caracter. Si es entero tendrás overflow. Si lo pones como float a double, igual guardas 918452356 como teléfono y te devuelve 9.1845e8.

En cuanto a punteros: Primero reservar memoria para la estructura.

agenda = (struct persona *)malloc (sizeof(struct persona));

Luego reservar memoria para los campos de la estructura que son punteros

agenda->nombre = (char *)malloc (25); /* 24 letras para el nombre más largo más el fin de cadena = 25 caracteres */
agenda->direccion = (char *)malloc (25); /*Idem para la dirección*/

Cuando termines de usar la estructura, hay que liberar todo en orden inverso. Primero los campos

free (agenda->nombre);
free (agenda->dirección);

y finalmente la estructura

free (agenda);

También puedes hacer como te dijo Ismael. Hacer que el campo nombre, en vez de un puntero, sea un array
struct persona
{
char nombre[25];
char telefono [15];
char direccion[25];
};

Es más cómodo, aunque el tamaño ya queda igual para todas las personas.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar