Requisito previo: Asignación dinámica de memoria en C
El método «malloc» o «asignación de memoria» se utiliza para asignar dinámicamente un solo bloque grande de memoria con el tamaño especificado. Devuelve un puntero de tipo void que se puede convertir en un puntero de cualquier forma. Inicializa cada bloque con un valor de basura predeterminado.
Sintaxis:
ptr = (cast-type*) malloc(byte-size)
Por ejemplo:
ptr = (int*) malloc(100 * tamaño(int));
Dado que el tamaño de int es de 4 bytes, esta declaración asignará 400 bytes de memoria. Y, el puntero ptr contiene la dirección del primer byte en la memoria asignada.
Pero la asignación de memoria mediante malloc() no se desasigna por sí sola. Por lo tanto, el método » free() » se utiliza para desasignar la memoria. Pero el método free() no es obligatorio de usar. Si no se usa free() en un programa, la memoria asignada usando malloc() se desasignará después de completar la ejecución del programa (el tiempo de ejecución del programa incluido es relativamente pequeño y el programa finaliza normalmente). Aún así, hay algunas razones importantes para liberar() después de usar malloc() :
- El uso de free after malloc es una buena práctica de programación.
- Hay algunos programas como un reloj digital, un oyente que se ejecuta en segundo plano durante mucho tiempo y también hay programas que asignan memoria periódicamente. En estos casos, incluso las pequeñas porciones de almacenamiento se suman y crean un problema. Así nuestro espacio útil disminuye. Esto también se llama «pérdida de memoria». También puede ocurrir que nuestro sistema se quede sin memoria si la desasignación de memoria no se produce en el momento adecuado.
Por lo tanto, el uso de las funciones free() depende del tipo de programa, pero se recomienda evitar problemas de memoria no deseados, como una fuga de memoria.
A continuación se muestra el programa para ilustrar el uso de free() y malloc() :
C
// C program to illustrate free() // and malloc() function #include <stdio.h> #include <stdlib.h> // Driver Code int main() { // Pointer to hold base address // of memory block int* p; int n, i; // Number of element n = 3; // Dynamically allocate memory // using malloc() p = (int*)malloc(n * sizeof(int)); // Check if memory allocation is // successful or not. if (p == NULL) { printf("Memory allocation" " failed.\n"); exit(0); } else { // Memory allocation successful printf("Memory allocation " "successful using" " malloc.\n"); // Insert element in array for (i = 0; i < n; i++) { p[i] = i + 2; } // Print the array element printf("The array elements" " are:\n"); for (i = 0; i < n; i++) { printf("%d ", p[i]); } // De-allocate the allocated // memory using free() free(p); } return 0; }
Memory allocation successful using malloc. The array elements are: 2 3 4
Publicación traducida automáticamente
Artículo escrito por tenacious39 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA