Fonction free

Entête à inclure

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

Fonction free

void free( void * pointer );

Cette fonction doit être utilisée conjointement avec la fonction malloc (ou calloc ou encore realloc). La fonction malloc (ou l'un des deux autres) alloue un bloc de mémoire dynamiquement dans le tas (le heap, en anglais). La fonction free libère un tel bloc de mémoire.

Note : ne jamais désallouer avec la fonction free un bloc de mémoire obtenue autrement que par l'une des trois fonction présentées ci-dessus.

Paramètres

  • pointer: l'adresse du bloc de mémoire à désallouer. Ce pointeur doit obligatoirement avoir été obtenu par un appel à malloc ou calloc ou bien malloc.

Valeur de retour

Aucune valeur de retour n'est produite.

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;
}

Astuce : utilisez un profileur de code C pour vérifier que la mémoire est bien libérée. Si vous êtes sur plate-forme Linux, le mieux est d'utiliser l'outil Valgrind (installez le si nécessaire : http://www.valgrind.org). L'exemple ci-dessous vous montre ce qui est produit par Valgrind sur l'exemple ci-dessus. Testez aussi votre programme en commentant l'appel à free.

$> valgrind testFree 
==7223== Memcheck, a memory error detector
==7223== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==7223== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==7223== Command: a.out
==7223== 
La copie contient : Chaine originale
==7223== 
==7223== HEAP SUMMARY:
==7223==     in use at exit: 0 bytes in 0 blocks
==7223==   total heap usage: 1 allocs, 1 frees, 17 bytes allocated
==7223== 
==7223== All heap blocks were freed -- no leaks are possible
==7223== 
==7223== For counts of detected and suppressed errors, rerun with: -v
==7223== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
$> 

Dans le cas ou vous observeriez une fuite mémoire, relancez Valgrind avec l'option suivante :
valgrind --leak-check=full testFree.

Sujets connexes