#include <stdlib.h> // <cstdlib> en C++
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
.
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é par 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 devrait 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
.
#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; }
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :