Menu
Coddy logo textTech

Liberare la memoria con free()

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 35 di 63.

Quando allochi memoria in modo dinamico usando malloc(), quella memoria rimane allocata finché non la rilasci esplicitamente. La funzione free() è lo strumento che usi per restituire al sistema la memoria allocata dinamicamente quando hai finito di usarla.

La funzione free() accetta un argomento: un puntatore al blocco di memoria che vuoi deallocare. Deve essere lo stesso puntatore restituito da malloc() (o da funzioni correlate come calloc()).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Alloca memoria
*ptr = 42;  // Usa la memoria
free(ptr);  // Libera la memoria quando hai finito

Non chiamare free() crea quello che è noto come perdita di memoria. La memoria allocata rimane riservata dal tuo programma anche se non la stai più usando. Nei programmi a esecuzione prolungata o in quelli che allocano memoria ripetutamente, queste perdite possono consumare tutta la memoria di sistema disponibile e causare problemi di prestazioni o arresti anomali.

Ricorda: ogni malloc() dovrebbe avere un corrispondente free(). Questa corrispondenza è essenziale per una gestione responsabile della memoria nella programmazione in C.

challenge icon

Sfida

Facile

Scrivi un programma in C che dimostri il ciclo di vita completo dell'allocazione e della deallocazione dinamica della memoria. Il programma dovrebbe:

  1. Leggere dall'utente un intero count che rappresenta quanti interi memorizzare
  2. Usare malloc() con sizeof() per allocare dinamicamente memoria per un array di count interi
  3. Controllare se l'allocazione della memoria è riuscita: in caso contrario, stampare Memory allocation failed! e terminare il programma
  4. Se l'allocazione riesce, stampare Memory allocated successfully!
  5. Leggere dall'utente count valori interi e memorizzarli nell'array allocato
  6. Calcolare e stampare la somma di tutti i valori nel formato: Sum: [value]
  7. Trovare e stampare il valore massimo nel formato: Maximum: [value]
  8. Usare free() per deallocare la memoria
  9. Stampare Memory freed successfully! per confermare la pulizia

Ricorda di includere l'header <stdlib.h> per usare malloc() e free(). Questa sfida dimostra l'essenziale abbinamento di malloc() e free() per prevenire le perdite di memoria nei tuoi programmi.

Per esempio, se l'input è:

4
15 8 23 12

L'output dovrebbe essere:

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

Questa sfida rafforza il concetto fondamentale che ogni blocco di memoria allocato dinamicamente deve essere liberato correttamente quando non è più necessario, completando il ciclo di gestione responsabile della memoria nella programmazione in C.

Provalo tu

#include <stdio.h>
#include <stdlib.h>

int main() {
    int count;
    
    // Leggi il numero di interi da memorizzare
    scanf("%d", &count);
    
    // TODO: Scrivi il tuo codice qui sotto
    // 1. Alloca memoria usando malloc() con sizeof()
    // 2. Verifica se l'allocazione è riuscita
    // 3. Leggi i valori interi e memorizzali
    // 4. Calcola la somma e trova il valore massimo
    // 5. Libera la memoria allocata
    
    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