Menu
Coddy logo textTech

Memory leak

Lezione 12 di 14 del corso Puntatori in C++ di Coddy.

Nella lezione precedente abbiamo usato la parola chiave delete, perché è davvero importante deallocare la memoria che hai allocato. Ora approfondiremo l'argomento.

Si verifica una perdita di memoria quando un programma alloca memoria dall'heap, ma non riesce a deallocarla quando non è più necessaria.

In sostanza, quando eseguiamo il programma, allochiamo la memoria necessaria e in seguito ce ne dimentichiamo: quella memoria non viene mai deallocata/eliminata. Guarda l'esempio qui sotto:

int *p, *q; // Dichiarazione
p = new int; // Allocazione
q = new int; // Allocazione

*p = 10; // Assegnazione
*q = 20; // Assegnazione

cout << *p << " " << *q << endl;
q = p; // q e p puntano alla stessa posizione
// La posizione iniziale di q è PERSA
cout << *p << " " << *q << endl;

delete p;
delete q;
Output:
10 20
10 10

Per prima cosa dichiariamo i puntatori, allochiamo memoria per un intero ciascuno e poi impostiamo i valori a quegli indirizzi. Come puoi vedere, possiamo stamparli con il primo cout. 


Le cose si fanno interessanti sulla riga <i>q = p</i>: impostiamo il puntatore <i>q</i> affinché punti alla stessa posizione a cui punta <i>p</i>. In questo modo, la posizione iniziale a cui avevamo destinato il puntatore <i>q</i> viene persa definitivamente e non è più possibile accedervi né eliminarla.


Come puoi vedere nella riga seguente, stampiamo di nuovo i puntatori dereferenziati e otteniamo valori uguali, perché puntano alla stessa posizione.

Ecco perché è così importante preoccuparsi delle perdite di memoria e gestire i dati allocati dinamicamente.

quiz iconMettiti alla prova

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

quiz iconMettiti alla prova

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

quiz iconMettiti alla prova

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

challenge icon

Sfida

Facile

Scrivi lo stesso programma della lezione precedente, ma questa volta dealloca tutta la memoria allocata usando la parola chiave delete. Alloca dinamicamente memoria per tre interi usando i puntatori ptrA, ptrB e ptrC. Usa i tre interi forniti come argomenti della funzione e imposta i valori agli indirizzi dei puntatori in modo che siano uguali ai rispettivi interi. Il primo intero a ptrA, il secondo intero a ptrB e l’ultimo intero a ptrC, infine stampa tutti i puntatori dereferenziati e separati da uno spazio vuoto

NON scrivere la <i>main()</i> funzione

Provalo tu

#include <iostream>

using namespace std;

void dynamicMemory(int a, int b, int c) {
    // Inserisci qui il tuo codice
    
    // Dealloca la memoria
}

// NON scrivere la funzione main()

Tutte le lezioni di Puntatori in C++

Esercitati da solo: Compilatore C++ online