Je travaille sur une ancienne base de code et à peu près chaque invocation de free () utilise un cast sur son argument. Par exemple,
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
où chaque pointeur est du type correspondant (et correspondant). Je ne vois aucun intérêt à faire cela. C'est un code très ancien, donc je me demande si c'est un truc K&R. Si tel est le cas, je souhaite en fait prendre en charge les anciens compilateurs qui peuvent avoir nécessité cela, donc je ne veux pas les supprimer.
Y a-t-il une raison technique d'utiliser ces moulages? Je ne vois même pas beaucoup de raison pragmatique de les utiliser. À quoi bon se rappeler le type de données juste avant de le libérer?
EDIT: Cette question n'est pas une duplication de l'autre question. L'autre question est un cas particulier de cette question, qui, je pense, est évidente si les électeurs proches liraient toutes les réponses.
Colophon: Je coche la "réponse const" parce que c'est une vraie raison pour laquelle cela pourrait devoir être fait; cependant, la réponse à ce sujet étant une coutume pré-ANSI C (du moins chez certains programmeurs) semble être la raison pour laquelle il a été utilisé dans mon cas. Beaucoup de bons points par beaucoup de gens ici. Merci pour vos contributions.
void*
de C pré-standard, mais seulement char*
. Donc, si vos découvertes archéologiques révèlent un code convertissant le paramètre en free (), je pense qu'il doit être soit de cette période, soit écrit par une créature de cette époque. Cependant, je ne trouve aucune source à ce sujet, alors je m'abstiendrai de répondre.