ubiquitour.com

Cómo hacer la asignación de almacenaje dinámica en C

En muchos casos, el usuario determina sobre la marcha si un programa procesará un array de 10 elementos o 10.000. Porque el tamaño de la matriz es desconocido de antemano, tienes que reservar memoria y liberarlo durante la ejecución del programa. Esta gestión de memoria en tiempo de ejecución se conoce en Ciencias de la computación como asignación de memoria dinámica. Este artículo se centra en las funciones de asignación dinámica de memoria en C.

Instrucciones

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

Ejemplo:

#include

2 Decidir lo que quieres hacer. Luego selecciona la función de los pasos siguientes que mejor se adapta 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 "tamaño" de bytes y devuelve un puntero al principio del bloque.

Prototipo:

void * malloc (size_t tamaño);

Ejemplo:

int i;

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

scanf ("%d" & i);

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

Si (NULL == buf) salida (1);

etc.

4 Emplear calloc() para un conjunto de elementos donde cada elemento tiene un tamaño de más de un byte. "Calloc" asigna un trozo de memoria para los elementos de "num" cada elemento de ser "tamaño" bytes de longitud. Devuelve un puntero al principio del bloque.

Prototipo:

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

Ejemplo:

int i, n;

int * pArr;

printf ("ingrese el numero de enteros:");

scanf ("%d" & i);

n = sizeof(int);

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

Si (NULL == pArr) salida (1);

etc.

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

Prototipo:

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

Ejemplo:

int num1, num2;

int * arr = NULL;

{}

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

scanf ("%d" & num1);

while(1 > NUM1);

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

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

{}

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

scanf ("%d" & num2);

while(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 ubicación de memoria "ptr", señalado.

Prototipo:

libre del vacío (void * ptr);

Ejemplo:

int * buf;

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

Free(BUF);

etc.

Consejos y advertencias

  • Asignación de memoria dinámica se puede hacer por el programador o por programación entidades llamadas recolectores de basura.
  • Muchos programas fallan a liberar memoria cuando ya no es necesario. Este consumo involuntario de la memoria se denomina pérdida de memoria.