• [^] # Re: foobar

    Posté par . En réponse au journal Gestion des erreurs d’allocation mémoire en C. Évalué à 3. Dernière modification le 27 octobre 2016 à 15:31.

    Je trouve que wrapper malloc() est déjà trop lourd

    Je trouve surtout qu'il est dangereux parce que selon les extraits des pages de manuel publiées ici,
    il peut sortir NULL en cas de xmalloc(0) sous linux.

    • sous FreeBSD, jemalloc(3) retourne un pointeur dans ce cas là.
     Even a request for zero bytes (i.e., malloc(0)) returns a pointer 
     to something of the minimum allocatable size.
    

    De fait, il vaut mieux connaitre (un peu) l'implémentation du malloc que l'on utilise.
    Et lorsque l'on alloue pour le noyau c'est encore différent.

    Dans tout les programmes non interactif, j'exit() après avoir utilisé perror():

    Quel différence avec err(3) ?(1)

    d'autant qu'un crash et qu'un exit() ce n'est pas la même chose

    Oui, l'un provoque un dump et pas l'autre. Si l'on veut un dump, on peut alors effectivement utiliser perror(1) puis abort(3).


    (1): au hasard, un des exemples de la page :

     if ((p = malloc(size)) == NULL)
     err(EX_OSERR, NULL);