Participer au site avec un Tip
Rechercher
 

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 :

Fonction malloc

La structure lldiv_t La macro MB_CUR_MAX


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

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

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

<stdlib.h>
aligned_alloc
calloc
free
realloc


La structure lldiv_t La macro MB_CUR_MAX