#define FREE( _p_ ) do { \ if ( (_p_) == NULL ) { \ fprintf( stderr, "Desallocation impossible dans le fichier :%s ligne : %d", \ __FILE__, __LINE__ ); \ exit( EXIT_FAILURE ); \ } \ free(_p_); \ (_p_) = NULL; \ } while (0)et de tout simplement remplacer free(ptr); par FREE(ptr);
On doit aussi prendre la bonne habitude de sortir du programme avec un message d’erreur quand une allocation a échoué, par exemple :
int* ptrEntier = (int*)malloc( sizeof(int) ); if ( ptrEntier == NULL) { printf( "L’allocation a échoué !\n" ); return 1; }Ou encore plus « pro » (merci au site developpez.com) :
#define MALLOC( _t_, _p_ ) do { \ (_p_) = (_t_ *)malloc( sizeof(_t_) ); \ if ( (_p_) == NULL ) { \ fprintf( stderr, "Allocation impossible dans le fichier %s, ligne %d", \ __FILE__, __LINE__ ); \ exit( EXIT_FAILURE ); \ } \ } while (0)Il suffira alors de remplacer (avantageusement) :
#define NMALLOC( _n_, _t_, _p_ ) do { \ (_p_) = (_t_ *)malloc( (_n_) * sizeof(_t_) ); \ if ( (_p_) == NULL ) { \ fprintf( stderr, "Allocation impossible dans le fichier %s, ligne %d", \ __FILE__, __LINE__ ); \ exit( EXIT_FAILURE ); \ } \ } while (0)Il suffira alors de remplacer (avantageusement) :
Dans ce cas, on pourait définir plus simplement la macro MALLOC :
#define MALLOC( _t_, _p_ ) NMALLOC( 1, _t_, _p_ )