Memoria dinamica con 'new'
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 6 di 56.
Finora hai lavorato con puntatori che puntano a variabili già create nel tuo programma. Ma cosa succede se devi creare variabili mentre il programma è in esecuzione? È qui che l’allocazione dinamica della memoria con la parola chiave new diventa essenziale.
La parola chiave new ti consente di allocare memoria per una variabile nell'heap durante l'esecuzione del programma. A differenza delle variabili normali, create nello stack, la memoria allocata dinamicamente persiste finché non la liberi esplicitamente.
int* ptr = new int; // Alloca memoria per un intero
*ptr = 42; // Assegna un valore alla memoria allocataIn questo esempio, new int alloca memoria sufficiente per memorizzare un intero e restituisce un puntatore a quella posizione di memoria. Puoi quindi usare l'operatore di dereferenziazione per assegnare valori e accedere alla variabile allocata dinamicamente proprio come a qualsiasi altro puntatore.
L'allocazione dinamica della memoria è particolarmente utile quando non sai quanta memoria ti servirà fino all'esecuzione del programma, oppure quando hai bisogno che le variabili esistano al di fuori dell'ambito in cui sono state create. Questa flessibilità rende new uno strumento potente per realizzare programmi più complessi.
Sfida
FacileCrea un programma che dimostri l'allocazione dinamica della memoria usando la parola chiave new per allocare memoria per una variabile durante l'esecuzione del programma.
Verrà fornito il seguente input:
- Un valore intero da memorizzare nella memoria allocata dinamicamente
Il tuo programma dovrebbe:
- Usare la parola chiave
newper allocare dinamicamente memoria per un intero - Memorizzare il puntatore restituito da
newin una variabile puntatore denominatanumPtr - Usare l'operatore di dereferenziazione per assegnare il valore di input alla memoria allocata dinamicamente
- Stampare il valore memorizzato nella memoria allocata dinamicamente dereferenziando il puntatore
- Stampare l'indirizzo di memoria memorizzato nel puntatore
Usa il seguente formato di output esatto:
Value: [value]
Address: [memory address]L'indirizzo di memoria verrà visualizzato in formato esadecimale, che è il modo in cui C++ mostra gli indirizzi di memoria per la memoria allocata dinamicamente.
Provalo tu
#include <iostream>
using namespace std;
int main() {
// Lee la entrada
int value;
cin >> value;
// TODO: Escribe tu código a continuación
// Usa 'new' para asignar memoria dinámicamente a un entero
// Guarda el puntero en una variable llamada 'numPtr'
// Asigna el valor de entrada a la memoria asignada dinámicamente
// Muestra el resultado
cout << "Value: " << /* desreferencia numPtr aquí */ << endl;
cout << "Address: " << /* imprime la dirección almacenada en numPtr */ << endl;
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online