Menu
Coddy logo textTech

Allocazione dinamica - malloc()

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

Ora imparerai a conoscere malloc(), la funzione principale per richiedere memoria dall'heap durante l'esecuzione del programma. La funzione malloc() sta per "allocazione della memoria" e ti consente di allocare memoria dinamicamente quando ne hai bisogno, anziché dichiarare variabili di dimensione fissa in fase di compilazione.

La funzione malloc() accetta un argomento: il numero di byte che vuoi allocare. Restituisce un puntatore void al blocco di memoria allocato, oppure NULL se l’allocazione non riesce. Poiché restituisce un puntatore void, puoi assegnarlo direttamente a un puntatore tipizzato; in C il cast è facoltativo (a differenza del C++, che lo richiede).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Alloca memoria per un intero
// ptr ora punta a una posizione di memoria che può contenere un intero

Il vantaggio principale di malloc() è la flessibilità: puoi richiedere esattamente la quantità di memoria di cui hai bisogno durante l’esecuzione e questa memoria rimane disponibile finché non la liberi esplicitamente. Questo è particolarmente utile quando non sai di quanta memoria avrai bisogno finché il tuo programma non è in esecuzione.

Ricorda di includere <stdlib.h> per usare malloc(); in C, convertire esplicitamente il puntatore void restituito è facoltativo, poiché viene convertito automaticamente nel tipo a cui lo assegni.

challenge icon

Sfida

Facile

Scrivi un programma C che illustri l’allocazione dinamica della memoria usando malloc() per creare e utilizzare un singolo intero nell’heap. Il tuo programma deve:

  1. Usare malloc() per allocare dinamicamente memoria per un intero
  2. Convertire il puntatore void restituito in un puntatore a intero
  3. Leggere un valore intero dall’input dell’utente
  4. Memorizzare il valore inserito nella memoria allocata dinamicamente usando l’operatore di dereferenziazione
  5. Stampare il valore memorizzato nel formato: Stored value: [value]
  6. Calcolare e memorizzare il quadrato del valore nella stessa posizione di memoria
  7. Stampare il valore elevato al quadrato nel formato: Squared value: [value]

Ricorda di includere l’intestazione <stdlib.h> per usare malloc(). Il tuo programma dovrebbe illustrare il flusso di lavoro di base dell’allocazione dinamica della memoria: richiedere memoria all’heap, usarla per memorizzare e manipolare dati e operare sulla memoria allocata tramite operazioni sui puntatori.

Per esempio, se l’utente inserisce 7, il tuo output dovrebbe essere:

Stored value: 7
Squared value: 49

Questa sfida ti introduce al concetto fondamentale di allocazione dinamica della memoria, in cui la memoria viene richiesta durante l’esecuzione invece di essere fissata al momento della compilazione, offrendo ai tuoi programmi maggiore flessibilità nell’uso della memoria.

Provalo tu

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

int main() {
    // Leggi l'input
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Scrivi il tuo codice qui sotto
    // 1. Usa malloc() per allocare memoria per un intero
    // 2. Converti il puntatore restituito in int*
    // 3. Memorizza il valore di input nella memoria allocata
    // 4. Stampa il valore memorizzato
    // 5. Calcola e memorizza il quadrato nella stessa posizione
    // 6. Stampa il valore al quadrato
    
    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