Menu
Coddy logo textTech

Asignación dinámica - malloc()

Parte de la sección Lógica y Flujo 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ón durante la ejecución del programa. La función malloc() significa «asignación de memoria» y te permite asignar memoria dinámicamente cuando la necesitas, en lugar de declarar variables de tamaño fijo en tiempo de compilación.

La función malloc() acepta un argumento: el número de bytes que quieres asignar. Devuelve un puntero void al bloque de memoria asignado, o NULL si la asignación falla. Como devuelve un puntero void, puedes asignarlo directamente a un puntero tipado; la conversión de tipo es opcional en C (a diferencia de C++, que la requiere).

#include <stdlib.h>

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

La principal ventaja de malloc() es la flexibilidad: puedes solicitar exactamente la cantidad de memoria que necesitas durante la ejecución, y esta memoria permanece disponible hasta que la liberas explícitamente. Esto resulta especialmente útil cuando no sabes cuánta memoria necesitarás hasta que el programa esté en ejecución.

Recuerda incluir <stdlib.h> para usar malloc(); convertir mediante una conversión explícita el puntero void devuelto es opcional en C, ya que se convierte automáticamente al tipo al que lo asignas.

challenge icon

Desafío

Fácil

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

  1. Usar malloc() para asignar memoria dinámicamente para un entero
  2. Convertir el puntero void devuelto en un puntero a entero
  3. Leer un valor entero de la entrada del usuario
  4. Almacenar el valor introducido en la memoria asignada dinámicamente usando el operador de desreferenciación
  5. Imprimir el valor almacenado con 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 con 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 del montón, usarla para almacenar y manipular datos, y trabajar con la memoria asignada mediante operaciones con punteros.

Por ejemplo, si el usuario introduce 7, tu salida debe ser:

Stored value: 7
Squared value: 49

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

Pruébalo tú mismo

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

int main() {
    // Leer la entrada
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Escribe tu código debajo
    // 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. Print the squared value
    
    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 Lógica y Flujo

Practica por tu cuenta: Compilador de C online