Du coup, le wrapper proposé ne résout pas le problème.
Le wrapper va en effet retourner NULL si la taille demandée est 0.
Je pense que s’il y a une possibilité légitime pour que le paramètre passé à xmalloc soit 0 (par exemple parce que ce paramètre dépend, d’une manière ou d’une autre, d’une donnée extérieure au programme), c’est un cas à gérer explicitement. Le wrapper ne se substitue pas à la validation des entrées. Il ne me semble pas pertinent de traiter de la même façon une entrée incorrecte et une situation de manque de mémoire.
Et s’il n’est pas légitime que le paramètre soit 0 (par exemple s’il ne l’est qu’à cause d’un « calcul foireux » en amont), alors c’est un bug, et le rôle du wrapper n’est pas de t’en prémunir. (A priori ce serait plutôt le rôle d’un assert(size != 0).)
[^] # Re: undefined behaviour
Posté par gouttegd . En réponse au journal Gestion des erreurs d’allocation mémoire en C. Évalué à 2. Dernière modification le 27 octobre 2016 à 16:36.
Le wrapper va en effet retourner
NULLsi la taille demandée est 0.Je pense que s’il y a une possibilité légitime pour que le paramètre passé à
xmallocsoit 0 (par exemple parce que ce paramètre dépend, d’une manière ou d’une autre, d’une donnée extérieure au programme), c’est un cas à gérer explicitement. Le wrapper ne se substitue pas à la validation des entrées. Il ne me semble pas pertinent de traiter de la même façon une entrée incorrecte et une situation de manque de mémoire.Et s’il n’est pas légitime que le paramètre soit 0 (par exemple s’il ne l’est qu’à cause d’un « calcul foireux » en amont), alors c’est un bug, et le rôle du wrapper n’est pas de t’en prémunir. (A priori ce serait plutôt le rôle d’un
assert(size != 0).)