• [^] # en repassant

    Posté par . En réponse au message free() or not free() ?. Évalué à 2.

    Il y a un problème avec ta macro.

    Si un autre programmeur fait un truc du genre :

    if (m_ptr->value == 0 ) MYFREE(ptr);
    return m_ptr;

    Ta macro sera développée comme :
    if (m_ptr->value == 0 ) assert(ptr!=NULL);
    free(ptr);
    ptr=NULL;
    return m_ptr;

    Là, tu as une destruction du pointeur quelque soit les conditions.

    Ta macro doit être écrite :
    #define MYFREE(ptr) { assert(ptr!=NULL); free(ptr); ptr=NULL; }

    Mais d'une manière générale, il faut mieux éviter des macros et faire des fonctions inline (et oui, on peut faire du inline en C )