Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Malloc y Free | Indicadores
Fundamentos de C
course content

Contenido del Curso

Fundamentos de C

Malloc y Free

Estas funciones nos permiten crear nuevos objetos no durante la compilación sino durante la ejecución del programa, permitiéndonos utilizar asignación dinámica de memoria.

malloc()

Antes, para asignar memoria a nuestros datos, simplemente declarábamos:

Ahora, con la función malloc(), podemos asignar memoria dinámicamente:

La función malloc() requiere el número de bytes a asignar como argumento. Si no estás seguro del tamaño de byte necesario, pero conoces el tipo de datos a almacenar, puedes ajustar la expresión de la siguiente manera:

¿Y ahora qué? Fíjate en que estamos asignando el resultado de la función malloc() a un puntero. ¡Esto significa que malloc() devuelve una dirección!

El prefijo (int*) es un cast explícito. Especificamos manualmente el tipo deseado. Por ejemplo:

c

Main

Nota

Recuerda incluir el fichero de encabezado stdlib.h. Contiene el prototipo de la función malloc().

Para almacenar datos en la dirección proporcionada por la función malloc(), utilizamos el operador dereference.

c

Main

¿Es posible liberar memoria? – Sí, pero sólo la memoria asignada por malloc() y funciones similares.

free()

Esta función se utiliza con punteros. Para ilustrarlo, ampliemos el ejemplo anterior:

c

Main

Curiosamente, incluso después de "borrar" un puntero, éste sigue siendo funcional, pero el valor almacenado en su posición de memoria asociada se desordena.

Esto conduce a un problema: una celda de memoria ocupada contiene ahora datos no fiables. Para evitar este tipo de punteros, el puntero utilizado debe ser reseteado a NULL.

c

Main

Poner un puntero a NULL después de liberar su memoria es una forma clara de indicar que el puntero ya no hace referencia a una ubicación de memoria válida.

Comprueba siempre si el puntero es NULL antes de usarlo para asegurarte de que no estás accediendo a memoria inválida o ya asignada.

¿Todo estuvo claro?

Sección 6. Capítulo 4
We're sorry to hear that something went wrong. What happened?
some-alt