Sto lavorando su una vecchia base di codice e praticamente ogni invocazione di free () usa un cast sul suo argomento. Per esempio,
free((float *)velocity);
free((float *)acceleration);
free((char *)label);
dove ogni puntatore è del tipo corrispondente (e corrispondente). Non vedo assolutamente nulla nel farlo. È un codice molto vecchio, quindi mi chiedo se è una cosa di K&R. In tal caso, in realtà desidero supportare i vecchi compilatori che potrebbero averlo richiesto, quindi non desidero rimuoverli.
C'è un motivo tecnico per usare questi cast? Non vedo nemmeno un motivo pragmatico per usarli. Qual è il punto di ricordare a noi stessi il tipo di dati prima di liberarlo?
EDIT: Questa domanda è non un duplicato dell'altra domanda. L'altra domanda è un caso speciale di questa domanda, che penso sia ovvio se gli elettori vicini leggessero tutte le risposte.
Colophon: sto dando alla "const answer" il segno di spunta perché è una vera ragione autentica per cui potrebbe essere necessario farlo; tuttavia, la risposta sul fatto che è un'abitudine C pre-ANSI (almeno tra alcuni programmatori) sembra essere la ragione per cui è stata utilizzata nel mio caso. Molti punti positivi di molte persone qui. Grazie per i tuoi contributi.
void*
nella C pre-standard, ma solo char*
. Quindi, se i tuoi reperti archeologici rivelano il codice che lancia il parametro su free (), credo che debba essere di quel periodo o scritto da una creatura di quel momento. Non riesco a trovare alcuna fonte per questo, quindi mi trattengo dal rispondere.