Menu
Coddy logo textTech

Liberare la memoria con 'delete'

Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 7 di 56.

Quando allochi memoria dinamicamente usando new, quella memoria non scompare automaticamente quando hai finito di usarla. A differenza delle variabili normali, che vengono ripulite automaticamente, la memoria allocata dinamicamente rimane in uso finché non la liberi esplicitamente. È qui che la parola chiave delete diventa essenziale.

La parola chiave delete dealloca la memoria che era stata precedentemente allocata con new. Quando usi delete, stai dicendo al sistema che hai finito di usare quella memoria e che può essere riutilizzata per altri scopi:

int* ptr = new int(42);  // Alloca la memoria
// Usa la memoria...
delete ptr;              // Libera la memoria

La regola fondamentale della gestione dinamica della memoria è semplice: per ogni new, deve esserci un delete corrispondente. Se dimentichi di eliminare la memoria allocata dinamicamente, crei una perdita di memoria: il tuo programma continua a trattenere memoria che non usa più, il che può portare il sistema a esaurire la memoria disponibile.

Dopo aver chiamato delete su un puntatore, quel puntatore diventa non valido e non dovrebbe essere usato di nuovo. È buona norma impostare il puntatore su nullptr dopo averlo eliminato, per evitare di usarlo accidentalmente.

challenge icon

Sfida

Facile

Crea un programma che dimostri l’intero ciclo di vita della memoria dinamica: allocala con new, usala e poi deallocala correttamente con delete.

Verranno forniti i seguenti input:

  • Un valore intero da memorizzare nella memoria allocata dinamicamente
  • Un secondo valore intero per aggiornare il valore memorizzato

Il programma dovrebbe:

  1. Usare new per allocare dinamicamente memoria per un intero e memorizzare il puntatore in una variabile chiamata dynamicPtr
  2. Assegnare il primo valore di input alla memoria allocata dinamicamente usando l’operatore di dereferenziazione
  3. Stampare il valore iniziale memorizzato nella memoria allocata dinamicamente
  4. Aggiornare il valore nella memoria allocata dinamicamente impostandolo al secondo valore di input
  5. Stampare il valore aggiornato
  6. Usare delete per liberare la memoria allocata dinamicamente
  7. Impostare il puntatore a nullptr dopo l’eliminazione
  8. Stampare un messaggio di conferma che indichi che la memoria è stata liberata

Usa esattamente il seguente formato di output:

Initial value: [first value]
Updated value: [second value]
Memory freed successfully

Provalo tu

#include <iostream>
using namespace std;

int main() {
    // Leggi i valori di input
    int firstValue, secondValue;
    cin >> firstValue;
    cin >> secondValue;
    
    // TODO: Scrivi il tuo codice qui sotto
    // 1. Alloca la memoria usando new e memorizza il puntatore in dynamicPtr
    // 2. Assegna firstValue alla memoria allocata
    // 3. Stampa il valore iniziale
    // 4. Aggiorna il valore con secondValue
    // 5. Stampa il valore aggiornato
    // 6. Libera la memoria e imposta il puntatore a nullptr
    // 7. Stampa il messaggio di conferma
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C++ online