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 reservadaEn 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.
Desafío
FácilCrea 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:
- Usar la palabra clave
newpara asignar dinámicamente memoria para un entero - Almacenar el puntero devuelto por
newen una variable de puntero llamadanumPtr - Usar el operador de desreferencia para asignar el valor de entrada a la memoria asignada dinámicamente
- Imprimir el valor almacenado en la memoria asignada dinámicamente desreferenciando el puntero
- 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 asignadaA 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;
}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
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea