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 free

La macro EXIT_SUCCESS La fonction getenv


Entête à inclure

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

Fonction free

void free( void * pointer );

La fonction free libère un bloc de mémoire alloué dynamiquement dans le tas (le heap, en anglais), via un appel à la fonction malloc (ou tout autre fonction d'allocation mémoire : aligned_alloc, calloc ou realloc).

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

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

<stdlib.h>
aligned_alloc
calloc
malloc
realloc


La macro EXIT_SUCCESS La fonction getenv