Fonction malloc

Entête à inclure

#include <stdlib.h>  // <cstdlib> en C++

Fonction malloc

void * malloc( size_t memorySize );

Cette fonction permet d'allouer un bloc de mémoire dans le tas (le heap en anglais). Attention : la mémoire allouée dynamiquement n'est pas automatiquement relachée. Il faudra donc, après utilisation, libérer ce bloc de mémoire via un appel à la fonction free.

Paramètres

  • memorySize : permet de spécifier la taille (en octets) du bloc de mémoire à allouer.

Valeur de retour

Si tout ce passe bien, la fonction vous renvoie un pointeur sur la zone nouvellement allouée. Attention, ce pointeur est de type pointeur générique (void *) : si nécessaire, il est donc de votre responsabilité de "caster" votre pointeur vers un autre type (du moins si vous souhaitez ne pas avoir de warning affiché pas le compilateur, ce que je vous recommande vivement).

Dans le cas ou le bloc de mémoire ne pourrait vous être réservé (plus de mémoire disponible, par exemple), le pointer NULL vous sera retourné. On derait normalement et systématiquement tester que l'on ait pas cette valeur. Néanmoins cela n'est pas toujours fait par les développeurs. Donc un petit conseil, utilisez au moins un assert.

Exemple de code

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

int main() {
    
    /* Cherchons à dupliquer une chaîne de caractères en mémoire */
    char * original = "Chaine originale";
    char * copy = NULL;

    /* Calcul de la taille à allouer */
    size_t l = strlen( original ) + 1;

    /* Allocation de la mémoire */
    copy = (char *) malloc( l * sizeof(char) );
    assert( copy != NULL );

    /* On duplique la chaine originale */
    strcpy( copy, original );

    /* On test que ca marche */
    printf( "La copie contient : %s\n", copy );

    /* Toujours libérer la mémoire après utilisation */
    free( copy );

    return 0;
}

Sujets connexes