Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

malloc vs calloc : Différences clés expliquées avec exemples pratiques

Qu'est-ce que l'allocation mémoire dynamique ?

L'allocation mémoire dynamique permet à un programme de demander et libérer de la mémoire à l'exécution. En C, la bibliothèque standard fournit quatre fonctions principales à cet effet – malloc(), calloc(), realloc() et free() – toutes déclarées dans stdlib.h.

malloc() : Allouer un bloc unique de mémoire

malloc() (abréviation de « memory allocation ») réserve un bloc contigu d'octets et retourne un pointeur vers le premier octet. Le contenu du bloc nouvellement alloué est indéterminé (valeurs résiduelles aléatoires).

Utilisation typique :

int *p = (int *)malloc(n * sizeof(int));

Si la requête échoue, malloc() retourne NULL.

calloc() : Allouer plusieurs blocs initialisés à zéro

calloc() (abréviation de « contiguous allocation ») prend deux arguments : le nombre d'éléments et la taille de chaque élément. Il alloue la mémoire pour tous les éléments et met automatiquement chaque octet à zéro, ce qui est idéal pour les tableaux ou structures nécessitant un état initial propre.

Utilisation typique :

int *p = (int *)calloc(n, sizeof(int));

Comme malloc(), il retourne NULL en cas d'échec.

Quand utiliser chaque fonction

Aperçu de la syntaxe

malloc()

void *malloc(size_t size);

calloc()

void *calloc(size_t num, size_t size);

Exemples de code pratiques

Exemple 1 : Utilisation de malloc() pour stocker 15 entiers

#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ème élément (index 0-based)
    printf("Value of the 6th integer is %d\n", ptr[5]);
    free(ptr);
    return EXIT_SUCCESS;
}

Sortie : Value of the 6th integer is 480

Exemple 2 : Utilisation de calloc() pour calculer une somme

#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; // initialisation redondante mais montrée pour la clarté
        sum += ptr[i];
    }
    printf("Sum = %d\n", sum);
    free(ptr);
    return EXIT_SUCCESS;
}

Sortie : Sum = 45

Comparaison côte à côte

malloc vs calloc : Différences clés expliquées avec exemples pratiques
Caractéristiquemalloc()calloc()
Nombre de paramètres1 (taille)2 (nombre, taille)
État mémoire après allocationNon initialisé (valeurs indéterminées)Initialisé à zéro
Cas d'usage typiqueBloc unique, initialisation manuelleTableaux ou structures nécessitant un début propre
PerformancePlus rapide (pas de mise à zéro)Plus lent (surcoût de mise à zéro)
SécuritéRisque accru d'utiliser des valeurs indéterminéesRisque réduit grâce à la mise à zéro automatique
Valeur de retour en cas d'échecNULLNULL
En-tête standardstdlib.hstdlib.h

Points clés à retenir

Langue C

  1. Expressions, instructions et blocs C# : Guide complet avec exemples pratiques
  2. Boucle do-while en C++ : Syntaxe, exemples pratiques et boucles imbriquées
  3. Maîtriser les pointeurs en C++ : Concepts, exemples et applications pratiques
  4. Maîtriser le type char en C++ : Déclaration, ASCII et techniques de conversion
  5. Surcharge d'opérateurs en C++ : Guide pratique avec exemples de code
  6. Les Fonctions en C++ Expliquées avec des Exemples de Code Pratiques
  7. Maîtriser les Collections C# : Tutoriel Pratique avec Exemples Réels
  8. Boucles While vs Do-While : Comparaison claire avec exemples pratiques
  9. calloc() en C : Allocation mémoire initialisée à zéro et exemple pratique