Cómo liberar memoria con la función malloc () en la programación c

Aquí hay un secreto: Declarar una variable en programación C es en realidad dirigir el programa a pedir un poco de espacio de almacenamiento del sistema operativo. Como ustedes saben (espero que, ya sabes), el sistema operativo es el señor High Maestro de la computadora o cualquier dispositivo electrónico que está programando. Como tal, se reparte RAM para los programas que lo soliciten.

Cuando se declara una variable, desde un int corto humilde a un búfer de cadena masiva, que está dirigiendo el programa para pedir que mucho espacio, en el que va a poner algo útil. En el lenguaje C, también se puede asignar memoria sobre la marcha, siempre y cuando usted tiene un ejército de punteros a mano para guardar las direcciones.

Conceptos básicos de la malloc () función

Existe la función malloc () para saciar las ansias de memoria de su programa. Darle un puntero y malloc () asigna memoria (conseguirlo?) En un determinado tamaño para almacenar cierto tipo variable. Este es el formato:

p = (escribe *) malloc (tamaño) -

escribe es un encasillado, dirigiendo malloc () para asignar una parte de la memoria dimensionado para almacenar la cantidad adecuada de la información para el tipo de variable dada.

tamaño es la cantidad de almacenamiento que se necesita. Se mide en bytes, pero hay que tener cuidado de asignar suficiente almacenamiento para acomodar el tipo de variable. Por ejemplo, si necesita más espacio para almacenar un valor int, que necesita para crear suficiente espacio de almacenamiento en el que un valor int encaja. Ese número de bytes se calcula tradicionalmente mediante el operador sizeof.

La función malloc () devuelve la dirección de la parte de la memoria que se asigna. La dirección se almacena en el puntero p, que debe coincidir con el tipo de variable. Cuando la memoria no se puede asignar, se devuelve un valor NULL.

Usted debe comprobar la NULL antes de utilizar la memoria asignada! Si no lo hace, su programa se reunirá con cierto peligro.

Por último, es necesario incluir el archivo de cabecera stdlib.h en su código fuente para mantener el compilador satisfechos con la función malloc (). Déme espacio muestra un ejemplo.

DARME EL ESPACIO

#include #include int main () {int * edad edad = (int *) malloc (sizeof (int) * 1), si (edad == NULL) {puts ("No se puede asignar memoria") - la salida (1 ) -} printf ("¿Cuántos años tienes?") -scanf (-printf ("Eres% d años. n" "% d", edad), * edad) -Retorno (0) -}

La primera cosa a notar acerca Dame espacio es que la única variable declarada es un puntero, la edad. Una variable int no está definido, a pesar de que el programa acepta int de entrada y de salida muestra int.

Línea 8 utiliza malloc () para dejar de lado el almacenamiento para un número entero. Para asegurarse de que se asigna la cantidad adecuada de almacenamiento, se utiliza el operador sizeof. Para asignar espacio para un entero, el valor de 1 se multiplica por el resultado de la (int) sizeof operación. (Ese proceso es innecesario en este punto, sino que entra en juego más tarde.) La dirección de que el almacenamiento se guarda en el puntero de edad.

Línea 9 pruebas para asegurar que malloc () fue capaz de asignar memoria. Si no, el valor devuelto es NULL (que es una constante definida en stdlib.h), y el programa mostrará un mensaje de error (referirse a la línea 11) y deja de (refiérase a la línea 12).

Se dará cuenta de que la función scanf () en la línea 15 no utiliza el prefijo. Eso es porque el años variable es una dirección de memoria - es un puntero! No es necesario el en ese caso (del mismo modo que no es necesario el para una cadena leído por la función scanf ()).

Por último, la notación peeker se utiliza en la línea 16 para mostrar la entrada de valor.

Ejercicio 1: Arranca un nuevo proyecto con el código fuente de la Darme Espacio. Genere y ejecute.

Ejercicio 2: Utilizando me da espacio como su inspiración, escribir un programa que pide la temperatura actual exterior como un valor de punto flotante. Tener el código preguntar si la entrada es grados Celsius o Fahrenheit. Utilice malloc () para crear almacenamiento para el valor de entrada. Muestra la temperatura resulta en Kelvin. Aquí están las fórmulas:

kelvin = centígrados + 273.15-kelvin = (fahrenheit + 459.67) * (5.0 / 9.0) -

Exercise 3: Escriba un programa que asigna espacio para tres valores int - una matriz. Es necesario utilizar la función de un solo malloc () para realizar esta tarea. Asignar 100, 200 y 300 a cada int, y luego mostrar los tres valores.

Cómo crear el almacenamiento de cadena

La función malloc () se utiliza comúnmente para crear un buffer de entrada. Esta técnica evita declarar y dimensionar una matriz vacía. Por ejemplo, la notación

entrada char [64] -

puede ser sustituida por la siguiente declaración:

char * input-

El tamaño del búfer se establece en el código mediante el uso de la función malloc () .En Asignar un búfer de entrada, la función malloc () en la línea 8 declara una matriz de caracteres - un tampón de almacenamiento - por cerca de 1.024 bytes. Está bien, es un kilobyte (KB).

Asignar una memoria intermedia de entrada

#include #include int main () {char * Entrada-input = (char *) malloc (sizeof (char) * 1024), si (entrada == NULL) {puts ("No se puede asignar memoria intermedia! ¡Oh, no!") -exit (1) -} puts ("Escribe algo larga y aburrida:") - fgets (de entrada, 1023, stdin) -puts ("Usted escribió:") - printf (""% s " n", entrada) -Retorno (0) -}

El resto del código acepta la entrada y luego muestra la salida. La función fgets () en la línea 15 límites de entrada de 1.023 bytes, dejando espacio sobrante para el 0 al final de la cadena.

Ejercicio 4: Látigo hasta un nuevo proyecto con el código fuente de la asignación de un búfer de entrada.

Ejercicio 5: Modificar el código fuente de la asignación de un búfer de entrada. Crear un segundo char buffer mediante el uso de un puntero y malloc (). Después de texto es leído por los fgets () función, copie el texto de la primera memoria intermedia (entrada en la asignación de un búfer de entrada) en el segundo tampón - todo el texto excepto el carácter de nueva línea, n, al final de la entrada.

Ejercicio 6: Modificar el código fuente de Ejercicio 5 de modo que el segundo tampón contiene una versión de texto en el primer tampón, donde todas las vocales han sido sustituidos con al-signos (@).




» » » » Cómo liberar memoria con la función malloc () en la programación c