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.
Igual que un int. Tienes un puntero a int; aquí tienes un puntero a la estructura.
free(b);
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. -
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.
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.