En muchos casos , el usuario determina sobre la marcha si un programa va a procesar un conjunto de 10 elementos o 10000 . Debido a que el tamaño de la matriz no se conoce de antemano , hay que dejar de lado la memoria y liberarla durante la ejecución del programa. Esta gestión de memoria en tiempo de ejecución se conoce 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. Cosas que necesitará
entorno de desarrollo integrado con C + + Compiler
libro sobre programación en C
Ver Más 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 de C , todas las funciones que llevan a cabo la asignación de memoria dinámica. Para incluir el archivo de biblioteca en el programa , inserte la siguiente línea en la parte superior de la fuente /archivo de cabecera
Ejemplo: .
# Include Página 2
Decida lo que quiere hacer . Luego escoja la función de los siguientes pasos que mejor se adapte a la acción de asignación de memoria que desea realizar .
3
uso malloc () para un bloque de memoria de tamaño conocido . " Malloc " asigna bytes " tamaño" y devuelve un puntero al principio del bloque
prototipo
void * malloc ( size_t size ) ;
Ejemplo: .
Int i;
caracteres * buf ; printf ("Introduzca longitud de la cadena :") ;
scanf ("% d ", & i);
buf = (char *) malloc ( i +1);
if ( NULL == buf) exit ( 1 ) ;
//etc Página 4
calloc Employ () para una serie de elementos que cada elemento tiene un tamaño de más de un byte . " Calloc " asigna un bloque de memoria para los elementos de " números " cada elemento son bytes " tamaño" de longitud. Devuelve un puntero al principio del bloque
Prototipo : void *
calloc (num size_t , tamaño size_t ) ;
Ejemplo: .
Int i , n ;
int * Parr ;
printf ( " Introduzca el número de enteros :") ;
scanf ("% d ", & i);
n = sizeof (int ) ;
Parr = (int *) calloc (i, n);
if ( NULL == Parr ) exit ( 1 ) ;
//etc Página 5
Utilizar realloc () para cambiar el tamaño de un bloque de memoria. " Realloc " amplía o reduce el bloque de memoria de bytes " tamaño" que " ptr " apuntó a
prototipo
oid * realloc (void * ptr , tamaño size_t ) ;
Ejemplo: .
Int num1 , num2 ;
int * arr = NULL;
no
{ printf ("Introduzca un número entero positivo :") ;
scanf ("% d ", & num1 ) ;
while ( 1 > num1 ) ;
arr = (int *) calloc ( num1 , sizeof (int ));
if ( NULL == arr ) exit ( 1 ) ;
hacer
{ printf ( " Introduzca otro número entero positivo : ") ;
scanf ("% d ", & num2 ) ;
while ( 1 > num2 ) ;
arr = (int *) realloc ( arr, num2 * sizeof (int ) ) ;
if ( NULL == arr ) exit ( 1 ) ;
//etc Página 6
lanzamiento de un bloque de memoria asignada en los pasos 3 a 5 con free () . "Free" libera el bloque de memoria que comienza en la memoria que " ptr " señalaron
Prototipo : void
libre (void * ptr ) ;
Ejemplo: .
Int * buf ;
buf = (int *) malloc ( 100 * sizeof (int ));
libre (buf ) ;
//etc