#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_ )