Page 249

4 Estructuras de datos: memoria din´amica

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

// Impresi´ on for (i=0; i<3; i++) for (j=0; j<3; j++) for (k=0; k<3; k++) printf ("%d %d %d: %d\n", i, j, k, a[i][j][k]);

23 24 25 26 27 28

// Liberaci´ on de memoria. for (i=0; i<3; i++) { for (j=0; j<3; j++) free(a[i][j]); free(a[i]); } free(a); a = NULL;

29 30 31 32 33 34 35 36 37

return 0;

38 39

}

En la siguiente figura se muestra el estado de la memoria tras la inicializaci´on de la matriz tridimensional: 0

1

2

0 1 2 0

1

2

1 2 3 0

1

2

2 3 4 0

a

0

1

2

0

1

2

0

1

2

0

1

2

1 2 3 0

1

2

1

2 3 4 2

0

1

2

3 4 5 0

1

2

2 3 4 0

1

2

3 4 5 0

1

2

4 5 6

4.4.

Redimensionamiento de la reserva de memoria

Muchos programas no pueden determinar el tama˜ no de sus vectores antes de empezar a trabajar con ellos. Por ejemplo, cuando se inicia la ejecuci´on de un programa que gestiona una agenda telef´onica no sabemos cu´ antas entradas contendr´a finalmente. Podemos fijar un n´ umero m´aximo de entradas y pedir memoria para ellas con malloc, pero entonces estaremos reproduciendo el problema que nos llev´ o a presentar los vectores din´amicos. Afortunadamente, C permite que el tama˜ no de un vector cuya memoria se ha solicitado previamente con malloc crezca en funci´on de las necesidades. Se usa para ello la funci´on realloc, cuyo prototipo es (similar a) ´este: stdlib.h 1 2 3

... void * realloc(void * puntero, int bytes); ...

Aqu´ı tienes un ejemplo de uso: Introducci´ on a la Programaci´ on con C

243

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement