Online C Compiler
Apri nel compilatore

Edizione didattica italiana

Esempio di memoria dinamica in C

Usa malloc, calloc, realloc e free rispettando dimensioni e durata dei blocchi.

Apri nel compilatore

Esempio di memoria dinamica in C
Usa malloc, calloc, realloc e free rispettando dimensioni e durata dei blocchi.

malloc riserva un blocco con contenuto iniziale indeterminato. calloc riserva più elementi e azzera i byte. Non leggere memoria malloc prima di inizializzarla; byte tutti a zero non rappresentano universalmente lo zero di ogni tipo.

Controlla il risultato e calcola la dimensione senza overflow. Con realloc conserva il puntatore originale fino al successo: se fallisce con una dimensione positiva, il vecchio blocco resta valido.

Libera ogni blocco una sola volta dopo l’uso. Non accedere dopo free e non liberare memoria automatica o indirizzi interni. I programmi reali devono gestire gli errori di allocazione.

Codice sorgente

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

int main(void)
{
    size_t count = 4;
    int *scores = calloc(count, sizeof *scores);
    if (scores == NULL) {
        fputs("Allocation failed.\n", stderr);
        return 1;
    }

    scores[2] = 9;
    for (size_t i = 0; i < count; ++i) {
        printf("%d%s", scores[i], i + 1 == count ? "\n" : " ");
    }

    free(scores);
    return 0;
}
Apri nel compilatore

Domande frequenti

Perché il codice e alcuni risultati restano in inglese?

Parole chiave C, identificatori, commenti del programma e output attesi restano quelli originali per preservare codice eseguibile e test coerenti. Spiegazioni e istruzioni sono tradotte.