Menu
Coddy logo textTech

Memoria dinámica con 'new'

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 6 de 56.

Hasta ahora, has trabajado con punteros que apuntan a variables ya creadas en tu programa. ¿Pero qué pasa si necesitas crear variables mientras tu programa se está ejecutando? Aquí es donde la asignación dinámica de memoria con la palabra clave new se vuelve esencial.

La palabra clave new te permite asignar memoria para una variable en el heap durante la ejecución del programa. A diferencia de las variables regulares que se crean en el stack, la memoria asignada dinámicamente persiste hasta que la liberes explícitamente.

int* ptr = new int;  // Asigna memoria para un entero
*ptr = 42;           // Asigna un valor a la memoria reservada

En este ejemplo, new int asigna suficiente memoria para almacenar un entero y devuelve un puntero a esa ubicación de memoria. Luego puedes usar el operador de desreferencia para asignar valores y acceder a la variable asignada dinámicamente al igual que cualquier otro puntero.

La asignación dinámica de memoria es particularmente útil cuando no sabes cuánta memoria necesitarás hasta el tiempo de ejecución, o cuando necesitas que las variables existan más allá del ámbito donde fueron creadas. Esta flexibilidad convierte a new en una herramienta poderosa para construir programas más complejos.

challenge icon

Desafío

Fácil

Crea un programa que demuestre la asignación dinámica de memoria utilizando la palabra clave new para asignar memoria a una variable durante la ejecución del programa.

Se proporcionará la siguiente entrada:

  • Un valor entero para almacenar en la memoria asignada dinámicamente

Tu programa debe:

  1. Usar la palabra clave new para asignar dinámicamente memoria para un entero
  2. Almacenar el puntero devuelto por new en una variable de puntero llamada numPtr
  3. Usar el operador de desreferencia para asignar el valor de entrada a la memoria asignada dinámicamente
  4. Imprimir el valor almacenado en la memoria asignada dinámicamente desreferenciando el puntero
  5. Imprimir la dirección de memoria almacenada en el puntero

Utiliza el siguiente formato de salida exacto:

Value: [value]
Address: [memory address]

La dirección de memoria se mostrará en formato hexadecimal, que es como C++ muestra las direcciones de memoria para la memoria asignada dinámicamente.

Hoja de referencia

La palabra clave new asigna memoria para una variable en el heap durante la ejecución del programa:

int* ptr = new int;  // Asigna memoria para un entero
*ptr = 42;           // Asigna un valor a la memoria asignada

A diferencia de las variables regulares creadas en la pila (stack), la memoria asignada dinámicamente persiste hasta que se libera explícitamente y puede existir más allá del ámbito donde fue creada.

Pruébalo tú mismo

#include <iostream>
using namespace std;

int main() {
    // Leer entrada
    int value;
    cin >> value;
    
    // TODO: Escribe tu código a continuación
    // Usa 'new' para asignar memoria dinámicamente para un entero
    // Almacena el puntero en una variable llamada 'numPtr'
    // Asigna el valor de entrada a la memoria asignada dinámicamente
    
    // Mostrar el resultado
    cout << "Value: " << /* desreferencia numPtr aquí */ << endl;
    cout << "Address: " << /* imprime la dirección almacenada en numPtr */ << endl;
    
    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