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.

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 compiladorPreguntas 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.