Foro de elhacker.net

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. -

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5. char nombre[30];
  6. char direccion[30];
  7. int edad;
  8. }alumno;
  9.  
  10. int main( void ){
  11. alumno *b=NULL;
  12. int max,i;
  13. unsigned int ch=0;
  14.  
  15. printf("\n Ingresa la cantidad de alumnos.....:");
  16. scanf("%d", &max);
  17. b = ( alumno * )malloc( sizeof(alumno)*max );
  18. for( i=0; i<max; i++){
  19. printf("\n Ingresa el nombre del alumnos [%d].....:", i+1);
  20. scanf( "%s", (b+i)->nombre );
  21. while((ch = getchar()) !='\n' && ch!=EOF);
  22. printf("\n Ingresa la direccion del alumno [%d]...:", i+1);
  23. scanf( "%s", (b+i)->direccion );
  24. while((ch = getchar()) !='\n' && ch!=EOF);
  25. printf("\n Ingresa la edad del alumno [%d]........:", i+1);
  26. scanf( "%d", &(b+i)->edad );
  27. printf( "\n ================================================\n" );
  28. }
  29.  
  30. for (i=0;i<max;i++){
  31. printf("%s\t%s\t%d\n",(*(b+i)).nombre,(*(b+i)).direccion,(*(b+i)).edad);
  32. }
  33.  
  34. return 0;
  35. }

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.
Código
  1. 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
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.