Online C Compiler
Abrir en el compilador

Edición didáctica en español. El código y sus salidas conservan el original.

Memoria dinámica en C: malloc y calloc

Asigna, redimensiona y libera memoria comprobando tamaños y errores.

Abrir en el compilador

Memoria dinámica en C: malloc y calloc
Asigna, redimensiona y libera memoria comprobando tamaños y errores.

malloc reserva un bloque cuyo contenido inicial es indeterminado. calloc reserva espacio para varios elementos y pone sus bytes a cero. No leas memoria de malloc antes de inicializarla y no interpretes la inicialización a cero como garantía universal de representación para todos los tipos.

Comprueba el resultado antes de usarlo y calcula el tamaño sin desbordamiento. Al usar realloc, conserva el puntero original hasta confirmar el éxito: si falla con un tamaño positivo, el bloque anterior sigue existiendo.

Libera cada bloque una sola vez cuando termine su uso. No accedas después de free y no liberes memoria automática ni direcciones interiores. El ejemplo muestra un uso pequeño; los programas reales también necesitan manejar fallos de asignación.

Código C

#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;
}
Abrir en el compilador

Preguntas frecuentes

¿Por qué el código y la salida siguen en inglés?

Las palabras clave, los identificadores y los textos que verifican las pruebas se conservan para no cambiar el programa. Las explicaciones y los controles están traducidos.