• [^] # Re: undefined behaviour

    Posté par . En réponse au journal Gestion des erreurs d’allocation mémoire en C. Évalué à 3.

    Je suis globalement d'accord avec ce que tu racontes.

    Cependant lorsque tu dis

    Note que je ne dis pas qu'il faut toujours gérer car ça arriverai tout le temps (par exemple pour un prototype, un dev rapide, peu utilisé, ben ça coûte cher à gérer

    C'est justement là où une gestion de type xmalloc est utile non ? Comme ça tu as au moins une idée d'où tu t'es planté, etc. D'ailleurs c'est peut-être là où une implémentation utilisant des macros peut s'avérer utile. Quelque chose du genre:

    static inline void 
    fatal(const char *err) {
     perror(err);
     exit(errno);
    }
    static inline void*
    xmalloc(size_t size, const char* filename, const int lineno)
    {
     void* p = malloc(size);
     if (!p) {
     fprintf(stderr, "%s, line %d:\t", filename, lineno);
     fatal("malloc");
     }
     return p;
    }
    #define XMALLOC(size) xmalloc((size), __FILE__, __LINE__)

    Enfin, de façon générale, la norme dit que malloc peut renvoyer NULL, et donc si on veut faire du code portable, il ne faut pas s'appuyer sur ce que fait Linux seulement. Même si on ne veut être « que » portable POSIX, ce n'est pas raisonnable. Ça ne veut pas dire forcément se faire chier avec une gestion complexe des erreurs, mais dans le cas de prototypes/dév rapide que tu évoques, le code ci-dessus me semble amplement suffisant (et tu peux l'inclure dans un header de type util.h et puis c'est marre), mais il reste utile à des fins de debug (note que je sais que tu n'as pas dit que c'était inutile, mais j'étends un peu ta réponse avec mon expérience :)).