165 votes

Le livre dit « Je dois monter malloc »

Aujourd'hui, j'ai atteint la page 167 pour le Langage de Programmation C (deuxième édition Brian W. Kernighan Et Dennis M. Ritchie) et j'ai trouvé que l'Auteur de dire que je doit exercer la fonction malloc, ici est la partie du livre:

7.8.5 De Gestion Du Stockage

Les fonctions malloc et calloc obtenir des blocs de mémoire de manière dynamique.

void *malloc(size_t n)

retourne un pointeur de n octets de non initialisé de stockage, ou NULL si la demande ne peut être satisfaite.

void *calloc(size_t n, size_t size)

retourne un pointeur vers un espace libre suffisant pour un tableau de n objets de la taille spécifiée, ou NULL si la demande ne peut être satisfaite. Le stockage est initialisée à zéro. Le pointeur retourné par malloc ou calloc a le bon alignement de l'objet en question, mais il doit être converti dans le type approprié, comme dans

int *ip;
ip = (int *) calloc(n, sizeof(int));

Je sais déjà que malloc (et sa famille) retourne le type est void* et voici bien expliqué, pourquoi ne pas jeter de malloc.

Mais ma Question est:

Pourquoi le livre de le dire?

EDIT:

Pourquoi Quelqu'un vote pour "Cette question peut-être déjà une réponse ici:" il y a sur le casting ou pas, moi je posais des questions à propos de ce livre, et pourquoi il l'Auteur de dire que j'ai de la fonte de la fonction malloc.

226voto

Alter Mann Points 10564

À partir de http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm:

En pré-ANSI C, comme décrit dans le K&R-1 -- malloc() a retourné une char * et il a été nécessaire de lancer sa valeur de retour dans tous les cas où la la réception de la variable n'est pas aussi une char *. Le nouveau void * type de Standard C fait, ces contorsions inutiles.

Pour sauver quelqu'un de l'embarras de l'bondissant inutilement à l' la défense de K&R-2, j'ai demandé à Dennis Ritchie pour un avis que j'ai pu citation sur la validité de la phrase citée ci-dessus à partir de la page 142. Il a répondu:

En tout cas, maintenant que j'ai relu le truc sur p. 142, je pense que c'est de mal; il est écrit de telle façon que ce n'est pas seulement défensive contre l'empire de la réglementation antérieure, il dénature l'ANSI règles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X