Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

malloc vs calloc: Diferencias clave explicadas con ejemplos prácticos

¿Qué es la asignación dinámica de memoria?

La asignación dinámica de memoria permite a un programa solicitar y liberar memoria en tiempo de ejecución. En C, la biblioteca estándar proporciona cuatro funciones principales para este propósito: malloc(), calloc(), realloc() y free(), todas declaradas en stdlib.h.

malloc(): Asignar un único bloque de memoria

malloc() (abreviatura de "memory allocation") reserva un bloque contiguo de bytes y devuelve un puntero al primer byte. El contenido del bloque recién asignado es indeterminado, es decir, contiene los bits que sucedan a estar en esa ubicación de memoria.

Uso típico:

int *p = (int *)malloc(n * sizeof(int));
Si la solicitud falla, malloc() devuelve NULL.

calloc(): Asignar múltiples bloques inicializados a cero

calloc() (abreviatura de "contiguous allocation") toma dos argumentos: el número de elementos y el tamaño de cada elemento. Asigna memoria para todos los elementos y automáticamente establece cada byte a cero, lo que lo hace ideal para arrays o estructuras que necesitan un estado inicial limpio.

Uso típico:

int *p = (int *)calloc(n, sizeof(int));
Al igual que malloc(), devuelve NULL si la asignación falla.

Cuándo usar cada función

Resumen de sintaxis

malloc()

void *malloc(size_t size);

calloc()

void *calloc(size_t num, size_t size);

Ejemplos de código prácticos

Ejemplo 1: Usar malloc() para almacenar 15 enteros

#include <stdlib.h> #include <stdio.h> int main(void) { int *ptr = malloc(15 * sizeof(*ptr)); if (!ptr) { perror("malloc failed"); return EXIT_FAILURE; } ptr[5] = 480; // 6º elemento (índice 0-based) printf("Value of the 6th integer is %d\n", ptr[5]); free(ptr); return EXIT_SUCCESS; }

Salida: Value of the 6th integer is 480

Ejemplo 2: Usar calloc() para calcular una suma

#include <stdlib.h> #include <stdio.h> int main(void) { int *ptr = calloc(10, sizeof(int)); if (!ptr) { perror("calloc failed"); return EXIT_FAILURE; } int sum = 0; for (int i = 0; i < 10; ++i) { ptr[i] = i; // la inicialización es redundante pero se muestra por claridad sum += ptr[i]; } printf("Sum = %d\n", sum); free(ptr); return EXIT_SUCCESS; }

Salida: Sum = 45

Comparación lado a lado

malloc vs calloc: Diferencias clave explicadas con ejemplos prácticos

Característicamalloc()calloc()
Número de parámetros1 (tamaño)2 (cuenta, tamaño)
Estado de memoria tras la asignaciónSin inicializar (basura)Inicializado a cero
Caso de uso típicoBloque único, inicialización manualArrays o estructuras que necesitan inicio limpio
RendimientoMás rápido (sin puesta a cero)Más lento (overhead de puesta a cero)
SeguridadMayor riesgo de usar valores basuraMenor riesgo gracias a la puesta a cero automática
Valor de retorno en caso de falloNULLNULL
Cabecera estándarstdlib.hstdlib.h

Conclusiones clave

Lenguaje C

  1. Expresiones, sentencias y bloques en C#: Guía completa con ejemplos prácticos
  2. Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
  3. Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
  4. Dominando el tipo de dato char en C++: Declaración, ASCII y técnicas de conversión
  5. Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
  6. Funciones en C++ Explicadas con Ejemplos de Código Prácticos
  7. Dominando Colecciones en C#: Tutorial Práctico con Ejemplos del Mundo Real
  8. Bucles While vs. Do-While: Comparación clara con ejemplos prácticos
  9. calloc() en C: Asignación de memoria inicializada a cero y ejemplo práctico
  10. Domine str.count() en Python: Cómo Contar Caracteres y Subcadenas con Ejemplos
  11. Función round() en Python explicada con ejemplos prácticos