Tecnología

Inicio

¿Cómo hacer asignación de almacenamiento dinámico en C

En muchos casos, el usuario determina sobre la marcha si un programa procesará un arreglo de 10 elementos o 10.000. Debido a que el tamaño de la matriz no se conoce de antemano, usted tiene que dejar de lado la memoria y lo liberan durante la ejecución del programa. Esta gestión de memoria en tiempo de ejecución es conocido en la informática como la asignación de memoria dinámica. Este artículo se centra en las funciones dedicadas a la asignación de memoria dinámica en C.

Instrucciones

1 Incluir el archivo de biblioteca con las definiciones de la biblioteca estándar. Este es el archivo "stdlib.h" e incluye, entre otras características importantes C, todas las funciones que llevan a cabo la asignación de memoria dinámica. Para incluir este archivo de biblioteca en su programa, inserte la siguiente línea en la parte superior del archivo fuente / cabecera.


Ejemplo:

#include <stdlib.h>

2

Decida lo que quiere hacer. A continuación, elija la función de los pasos siguientes que mejor se adapte a la acción de asignación de memoria que desea realizar.

3

Utilizar malloc () para un bloque de memoria de tamaño conocido. "Malloc" asigna bytes "tamaño" y devuelve un puntero al comienzo del bloque.


Prototipo:

void * malloc (tamaño size_t);

Ejemplo:

int i;

char * buf;
printf ( "Introduzca longitud de la cadena:");

scanf ( "% d", & I);

buf = (char *) malloc (i + 1);

si (== NULL BUF) salida (1);

// etc.

4

Emplear calloc () para una serie de elementos en los que cada elemento tiene un tamaño de más de un byte. "Calloc" asigna un trozo de memoria para los elementos "num" siendo cada elemento bytes "tamaño" de longitud. Se devuelve un puntero al comienzo del bloque.


Prototipo:

void * calloc (size_t num, tamaño size_t);

Ejemplo:

int i, n;

int * Parr;

printf ( "Introduce el número de enteros:");

scanf ( "% d", & I);

n = sizeof (int);

Parr = (int *) calloc (i, n);

si la salida (NULL == PARR) (1);

// etc.

5

Utilizar realloc () para cambiar el tamaño de un bloque de memoria. "Realloc" amplía o reduce el bloque de memoria de "tamaño" bytes que "ptr" señaló.


Prototipo:

* OID realloc (void * ptr, tamaño size_t);

Ejemplo:

int num1, num2;

int * arr = NULL;

do {

printf ( "Introduzca un número entero positivo:");

scanf ( "% d", y num1);

mientras que (1> num1);

arr = (int *) calloc (num1, sizeof (int));

si (== NULL arr) salida (1);

do {

printf ( "Introduzca otro número entero positivo:");

scanf ( "% d", y num2);

mientras que (1> num2);

arr = (int *) realloc (arr, num2 * sizeof (int));

si (== NULL arr) salida (1);

// etc.

6

Liberar un bloque de memoria asignada en los pasos 3 a 5 usando free (). "Libre" libera el bloque de memoria que comienza en la posición de memoria que "ptr" señaló.


Prototipo:

libre de huecos (void * ptr);

Ejemplo:

int * buf;

buf = (int *) malloc (100 * sizeof (int));

libre (buf);

// etc.

Consejos y advertencias

  • Asignación dinámica de memoria se puede hacer por el programador o mediante la programación de entidades llamadas colectores de basura.
  • Muchos programas no liberan memoria cuando ya no es necesaria. Este consumo involuntario de la memoria se llama pérdida de memoria.