Redéfinir les fonctions d’allocation de mémoire

Problème

Vous avez besoin d’utiliser vos propres fonctions d’allocation de mémoire, par exemple pour y ajouter un outil de traçage des allocations/libérations de mémoire. 

Solution

Créez votre propre fonction d’allocation mémoire, puis utilisez #define pour affecter au nom de la fonction standard votre nouvelle fonction.

Discussion

Voici un exemple de redéfinition de malloc() qui arrête le programme si l’allocation a échoué :


/* fichier.c */ 
#include <stdlib.h> 
 
void * 
my_malloc (size_t size) 
{ 
  void *p; 
  if (NULL == (p = malloc (size))) 
    exit (EXIT_FAILURE); 
  return (p); 
} 
 
/* fichier.h */ 
#include <stdlib.h> 
void *my_malloc (size_t size); 
#define malloc(x) my_malloc(x)
 

Attention ! L’affectation de votre nouvelle fonction au nom de la fonction standard avec #define ne doit surtout pas être effectuée avant la définition de votre fonction car celle-ci utilise la fonction malloc() standard. Sinon, cela reviendrait à une définition récursive sans condition d’arrêt et le préprocesseur vous le ferait remarquer. Dans l’exemple ci-dessus, vous ne devez donc pas inclure le fichier d’en-têtes fichier.h dans le fichier fichier.c contenant my_malloc().

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Créer son gestionnaire de mémoire
Suivant
Tracer les allocations de mémoire