Como liberar memoria en estructura dinámica [C]

Iniciado por NOB2014, 13 Enero 2017, 12:01 PM

0 Miembros y 1 Visitante están viendo este tema.

NOB2014

Hoa, gente ¿cómo están?
Bueno no tengo mucho para agregar, por más que busco en internet no puedo encontrar un Ej. concreto de como liberar la memoria en una estructura dinámica. -

#include <stdio.h>
#include <stdlib.h>

typedef struct{
char nombre[30];
char direccion[30];
int edad;
}alumno;

int main( void ){
alumno *b=NULL;
int max,i;
unsigned int ch=0;

printf("\n Ingresa la cantidad de alumnos.....:");
scanf("%d", &max);
b = ( alumno * )malloc( sizeof(alumno)*max );
for( i=0; i<max; i++){
printf("\n Ingresa el nombre del alumnos [%d].....:", i+1);
scanf( "%s", (b+i)->nombre );
while((ch = getchar()) !='\n' && ch!=EOF);
printf("\n Ingresa la direccion del alumno [%d]...:", i+1);
scanf( "%s", (b+i)->direccion );
while((ch = getchar()) !='\n' && ch!=EOF);
printf("\n Ingresa la edad del alumno [%d]........:", i+1);
scanf( "%d", &(b+i)->edad );
printf( "\n ================================================\n" );
}

for (i=0;i<max;i++){
printf("%s\t%s\t%d\n",(*(b+i)).nombre,(*(b+i)).direccion,(*(b+i)).edad);
}

return 0;
}


Si alguien me pondría un Ej. relacionado con el código, Danielito muy agradecido -
Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

ivancea96

Igual que un int. Tienes un puntero a int; aquí tienes un puntero a la estructura.
free(b);

NOB2014

Hola, gracias por ocuparte. -
Me pregunto, al ser un array de estructura no debería hacer un bucle primero para liberar cada uno de los punteros, discúlpame la ignorancia. -
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

ivancea96

En C, no hay diferencia entre liberar un elemento o un array.
free lobera lo que malloc reservó. malloc no sabe si es un elemento o un array (malloc te retorna un void* apuntando a N bytes, sin más), por tanto, free tampoco tiene que saberlo.

geeke

Cita de: NOB2014 en 13 Enero 2017, 14:25 PM
Me pregunto, al ser un array de estructura no debería hacer un bucle primero para liberar cada uno de los punteros, discúlpame la ignorancia. -

En tu caso sólo asignas un array de estructura por lo tanto basta con hacer free(b) y listo, un bucle seria necesario si tienes un array de punteros a estructura para así poder liberar cada elemento pero este no es el caso.