Menu
Coddy logo textTech

Asignación dinámica - malloc()

Parte de la sección Logic & Flow del Journey de C de Coddy — lección 32 de 63.

Ahora aprenderás sobre malloc(), la función principal para solicitar memoria del montículo (heap) durante la ejecución del programa. La función malloc() significa "memory allocation" (asignación de memoria) y te permite asignar memoria dinámicamente cuando la necesites, en lugar de declarar variables de tamaño fijo en tiempo de compilación.

La función malloc() toma un argumento: el número de bytes que deseas asignar. Devuelve un puntero void al bloque de memoria asignado, o NULL si la asignación falla. Dado que devuelve un puntero void, debes realizar un cast al tipo de datos apropiado.

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Asignar memoria para un entero
// ptr ahora apunta a una ubicación de memoria que puede contener un entero

La ventaja clave de malloc() es la flexibilidad: puedes solicitar exactamente la cantidad de memoria que necesitas en tiempo de ejecución, y esta memoria permanece disponible hasta que la liberes explícitamente. Esto es particularmente útil cuando no sabes cuánta memoria necesitarás hasta que tu programa se esté ejecutando.

Recuerda incluir <stdlib.h> para usar malloc(), y siempre realiza un cast del puntero void devuelto para que coincida con el tipo de datos con el que estás trabajando.

challenge icon

Desafío

Fácil

Escribe un programa en C que demuestre la asignación dinámica de memoria utilizando malloc() para crear y trabajar con un único entero en el heap. Tu programa debe:

  1. Usar malloc() para asignar dinámicamente memoria para un entero
  2. Convertir (cast) el puntero void devuelto a un puntero de entero
  3. Leer un valor entero de la entrada del usuario
  4. Almacenar el valor de entrada en la memoria asignada dinámicamente utilizando el operador de desreferencia
  5. Imprimir el valor almacenado en el formato: Stored value: [value]
  6. Calcular y almacenar el cuadrado del valor en la misma ubicación de memoria
  7. Imprimir el valor al cuadrado en el formato: Squared value: [value]

Recuerda incluir la cabecera <stdlib.h> para usar malloc(). Tu programa debe demostrar el flujo de trabajo básico de la asignación dinámica de memoria: solicitar memoria al heap, usarla para almacenar y manipular datos, y trabajar con la memoria asignada a través de operaciones con punteros.

Por ejemplo, si el usuario introduce 7, tu salida debería ser:

Stored value: 7
Squared value: 49

Este desafío te introduce al concepto fundamental de la asignación dinámica de memoria, donde la memoria se solicita en tiempo de ejecución en lugar de estar fija en tiempo de compilación, otorgando a tus programas una mayor flexibilidad en el uso de la memoria.

Hoja de referencia

La función malloc() asigna memoria dinámicamente desde el montón (heap) durante la ejecución del programa. Toma el número de bytes a asignar y devuelve un puntero void al bloque de memoria asignado, o NULL si la asignación falla.

Incluya <stdlib.h> para usar malloc():

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Asignar memoria para un entero

Puntos clave:

  • Siempre realice un cast del puntero void devuelto al tipo de dato apropiado
  • La memoria permanece disponible hasta que se libera explícitamente
  • Proporciona flexibilidad para solicitar cantidades exactas de memoria en tiempo de ejecución
  • Use sizeof() para determinar el número correcto de bytes necesarios

Pruébalo tú mismo

#include <stdio.h>
#include <stdlib.h>

int main() {
    // Leer entrada
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Escribe tu código a continuación
    // 1. Usa malloc() para asignar memoria para un entero
    // 2. Convierte el puntero devuelto a int*
    // 3. Almacena el valor de entrada en la memoria asignada
    // 4. Imprime el valor almacenado
    // 5. Calcula y almacena el cuadrado en la misma ubicación
    // 6. Imprime el valor al cuadrado
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow