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 10Per 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.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Sfida
FacileScrivi 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++
2Puntatori e riferimenti
Puntatori come parametriRiferimenti - &Riferimenti come parametriPuntatori vs riferimenti3Allocazione dinamica della memoria
Operatori new e deleteMemory leakArray dinamicoArray dinamico - inserimentoEsercitati da solo: Compilatore C++ online