Cómo liberar memoria en la programación c
No es tanto un problema como lo fue en la época de microcomputadoras, pero la memoria de perder aún debe ser una preocupación para cualquier programador C. Aunque usted puede prepárate para 1.024 caracteres de entrada, más probable es que los usuarios de su programa pueden no ser todos Stephen King.
En ese caso, se puede recortar sus peticiones de memoria después de que los hacen. La memoria adicional puede ser devuelta al sistema operativo en lo que se considera la cortesía común.
DAR DE NUEVO A ALGUNOS BYTES
#include #include #include int main () {char * input-int len-input = (char *) malloc (sizeof (char) * 1024), si (entrada == null) {puts ("No se puede asignar memoria intermedia! ¡Oh, no ") - la salida (1) -} puts (" Tipo algo largo y aburrido: ") - fgets (entrada, 1023, stdin) -len = strlen (entrada), si (realloc (entrada, sizeof (char) * (1 + len)) == NULL) {puts ("No se puede reasignar búfer!") - salida (1) -} puts ("Memoria reasignado.") - puts ("Usted escribió:") - printf (" "% s " n ", entrada) -Retorno (0) -}
El código fuente en devolver unos pocos bytes acomoda la función realloc () en la línea 19. Este es el formato:
p = Realloc (amortiguador,tamaño) -
amortiguador es un área existente de almacenamiento, creado por el malloc () (o similar) función. tamaño es el nuevo tamaño de búfer basado en sin embargo el número de unidades que necesita de un tipo variable específica. Tras el éxito, realloc () devuelve un puntero a amortiguador- de lo contrario, se devuelve NULL. Al igual que con malloc (), la función realloc () requiere la cabecera stdlib.h.
La cabecera string.h se llama en al línea 3. Que es para satisfacer el uso de la función strlen () en la línea 18. longitud del cadena de entrada se recopila y se guarda en la len variable.
En la línea 19, la función realloc () se llama. Se cambia el tamaño de un búfer ya creado a un nuevo valor. En la línea 19, que es el tampón de memoria intermedia de entrada, y el tamaño es la longitud de la cadena, más 1 para dar cuenta de la 0 carácter. Después de todo, todo el texto que se introdujo y todo el almacenamiento que se necesita.
Si la función realloc () tiene éxito, se cambia el tamaño de la memoria intermedia. En caso contrario, se devuelve un NULL, que se probó durante al línea 19 y, si se muestran los verdaderos mensajes de error, apropiados.
Ejercicio 1: Escriba el código fuente desde Giving Back unos pocos bytes en su editor. Genere y ejecute.
Aunque usted no tiene ninguna confirmación secundaria, se puede suponer que la llamada exitosa a la función realloc (), de hecho, reducir el tamaño del búfer de entrada a exactamente lo que se necesitaba. Cualquier almacenamiento de sobras es una vez más a disposición del programa.
Una función final se requiere con el fin de hacer que malloc () y realloc () en un trío. Esa es la función free (), se demuestra en si usted ama a su memoria, déjalo libre.
SI USTED AMA A SU MEMORIA, déjalo libre
#include #include int main () {int * edad edad = (int *) malloc (sizeof (int) * 1), si (edad == NULL) {puts ("Out of Memory o algo!") - salida (1) -} printf ("¿Cuántos años tienes en años?") -scanf ("% d", la edad) - * Edad * = 365-printf ("¡Usted es más de% d días n", * edad) exento (edad) -Retorno (0) -}
La función free () libera la memoria asignada, por lo que es disponible para malloc () o alguna otra cosa para su uso.
Ejercicio 2: Escriba el código fuente si usted ama a su memoria, déjalo libre en un nuevo proyecto. Genere y ejecute.
No es necesario el uso de free () en el código a menos que sea necesario o recomendable. La mayoría de los programadores no utilizan libres (), gracias a los montones de memoria lleno en la mayoría de los dispositivos electrónicos de hoy en día. Memoria utilizada por el programa se libera automáticamente por el sistema operativo cuando el programa sale. Cuando la memoria es escaso, sin embargo, utilizar libremente tanto realloc () y free () para evitar errores de falta de memoria.