C Asignación de memoria dinámica
C Asignación dinámica de memoria
En este tutorial, aprenderá a asignar memoria dinámicamente en su programa C usando funciones de biblioteca estándar:malloc(), calloc(), free() y realloc().
Como sabe, una matriz es una colección de un número fijo de valores. Una vez que se declara el tamaño de una matriz, no puede cambiarlo.
A veces, el tamaño de la matriz que declaró puede ser insuficiente. Para resolver este problema, puede asignar memoria manualmente durante el tiempo de ejecución. Esto se conoce como asignación de memoria dinámica en programación C.
Para asignar memoria dinámicamente, las funciones de la biblioteca son malloc()
, calloc()
, realloc()
y free()
son usados. Estas funciones se definen en el <stdlib.h>
archivo de encabezado.
C malloc()
El nombre "malloc" significa asignación de memoria.
El malloc()
La función reserva un bloque de memoria del número especificado de bytes. Y devuelve un puntero de void
que se pueden convertir en punteros de cualquier forma.
Sintaxis de malloc()
ptr = (castType*) malloc(size);
Ejemplo
ptr = (float*) malloc(100 * sizeof(float));
La instrucción anterior asigna 400 bytes de memoria. Es porque el tamaño de float
es de 4 bytes. Y, el puntero ptr contiene la dirección del primer byte en la memoria asignada.
La expresión da como resultado un NULL
puntero si la memoria no se puede asignar.
C calloc()
El nombre "calloc" significa asignación contigua.
El malloc()
La función asigna memoria y deja la memoria sin inicializar, mientras que calloc()
La función asigna memoria e inicializa todos los bits a cero.
Sintaxis de calloc()
ptr = (castType*)calloc(n, size);
Ejemplo:
ptr = (float*) calloc(25, sizeof(float));
La declaración anterior asigna espacio contiguo en la memoria para 25 elementos de tipo float
.
C libre()
Memoria asignada dinámicamente creada con calloc()
o malloc()
no se libera solo. Debes usar explícitamente free()
para liberar el espacio.
Sintaxis de libre()
free(ptr);
Esta sentencia libera el espacio asignado en la memoria apuntada por ptr
.
Ejemplo 1:malloc() y free()
// Program to calculate the sum of n numbers entered by the user
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, *ptr, sum = 0;
printf("Enter number of elements: ");
scanf("%d", &n);
ptr = (int*) malloc(n * sizeof(int));
// if memory cannot be allocated
if(ptr == NULL) {
printf("Error! memory not allocated.");
exit(0);
}
printf("Enter elements: ");
for(i = 0; i < n; ++i) {
scanf("%d", ptr + i);
sum += *(ptr + i);
}
printf("Sum = %d", sum);
// deallocating the memory
free(ptr);
return 0;
}
Salida
Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156
Aquí, hemos asignado dinámicamente la memoria para n número de int
.
Ejemplo 2:calloc() y free()
// Program to calculate the sum of n numbers entered by the user
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, *ptr, sum = 0;
printf("Enter number of elements: ");
scanf("%d", &n);
ptr = (int*) calloc(n, sizeof(int));
if(ptr == NULL) {
printf("Error! memory not allocated.");
exit(0);
}
printf("Enter elements: ");
for(i = 0; i < n; ++i) {
scanf("%d", ptr + i);
sum += *(ptr + i);
}
printf("Sum = %d", sum);
free(ptr);
return 0;
}
Salida
Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156
C realloc()
Si la memoria asignada dinámicamente es insuficiente o más de lo necesario, puede cambiar el tamaño de la memoria previamente asignada usando el realloc()
función.
Sintaxis de realloc()
ptr = realloc(ptr, x);
Aquí, ptr se reasigna con un nuevo tamaño x .
Ejemplo 3:realloc()
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr, i , n1, n2;
printf("Enter size: ");
scanf("%d", &n1);
ptr = (int*) malloc(n1 * sizeof(int));
printf("Addresses of previously allocated memory:\n");
for(i = 0; i < n1; ++i)
printf("%pc\n",ptr + i);
printf("\nEnter the new size: ");
scanf("%d", &n2);
// rellocating the memory
ptr = realloc(ptr, n2 * sizeof(int));
printf("Addresses of newly allocated memory:\n");
for(i = 0; i < n2; ++i)
printf("%pc\n", ptr + i);
free(ptr);
return 0;
}
Salida
Enter size: 2 Addresses of previously allocated memory: 26855472 26855476 Enter the new size: 4 Addresses of newly allocated memory: 26855472 26855476 26855480 26855484
Lenguaje C
- Memoria de solo lectura (ROM)
- Microprocesadores
- Gestión de memoria C++:nuevo y eliminar
- Cervoz actualiza la memoria DDR4-2666 de próxima generación
- C++ Asignación dinámica de arreglos con ejemplo
- Función calloc() en la biblioteca C con programa EJEMPLO
- Realloc () Función en la biblioteca C:¿Cómo usar? Sintaxis y ejemplo
- C - Gestión de memoria
- La fijación de precios dinámica en el comercio minorista tradicional es inevitable
- Memoria dinámica C++
- Java 10 - Asignación de montones