Ejemplo de asignación, redimencionamiento y liberación de memoria
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ERROR 1 struct persona { char nombre[50]; int edad; }; int main() { struct persona *p; int seguircargando; int longitudPersonas = 1; struct persona *aux; int i; // Creamos el array de personas p = malloc(sizeof(struct persona)); if(p == NULL) { printf("\n No hay lugar en la memoria"); return ERROR; } do { printf("\n Ingrese nombre:"); scanf("%s", (p+longitudPersonas-1)->nombre); printf("\n Ingrese edad:"); scanf("%d", &(p+longitudPersonas-1)->edad); printf("\n Desea cargar otra persona ingrese (1):"); scanf("%d", &seguircargando); if(seguircargando ==1) { // calcular el nuevo tamaño del array // Redimencionamos la lista aux = realloc(p,sizeof(struct persona)); if( aux == NULL) { printf("\n No hay lugar en la memoria"); return ERROR; } longitudPersonas++; //Incremento el contador de personas p = aux; } } while(seguircargando==1); for(i =0; i <longitudPersonas; i++) { printf("\n-----------\n"); printf("\n Nombre: %s - ", (p+i)->nombre); printf("Edad: %d", (p+i)->edad); } free(p); // liberamos memoria return 0; }