Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 13 Enero 2017, 12:01 PM

Título: Como liberar memoria en estructura dinámica [C]
Publicado por: NOB2014 en 13 Enero 2017, 12:01 PM
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.
Título: Re: Como liberar memoria en estructura dinámica [C]
Publicado por: ivancea96 en 13 Enero 2017, 14:20 PM
Igual que un int. Tienes un puntero a int; aquí tienes un puntero a la estructura.
free(b);
Título: Re: Como liberar memoria en estructura dinámica [C]
Publicado por: NOB2014 en 13 Enero 2017, 14:25 PM
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. -
Título: Re: Como liberar memoria en estructura dinámica [C]
Publicado por: ivancea96 en 13 Enero 2017, 14:48 PM
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.
Título: Re: Como liberar memoria en estructura dinámica [C]
Publicado por: geeke en 13 Enero 2017, 15:24 PM
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.