webentwicklung-frage-antwort-db.com.de

Warum steht in "The C Programming Language", dass ich malloc besetzen muss?

Heute habe ich Seite 167 von The C Programming Language (zweite Auflage Brian W. Kernighan & Dennis M. Ritchie) erreicht und gefunden dass der Autor sagt, ich muss malloc besetzen. Hier ist der Teil aus dem Buch:

7.8.5 Speicherverwaltung

Die Funktionen malloc und calloc beziehen dynamisch Speicherblöcke.

void *malloc(size_t n)

gibt einen Zeiger auf n Bytes des nicht initialisierten Speichers oder NULL zurück, wenn die Anforderung nicht erfüllt werden kann.

void *calloc(size_t n, size_t size)

gibt einen Zeiger auf genügend freien Speicherplatz für ein Array von n Objekten der angegebenen Größe zurück oder NULL, wenn die Anforderung nicht erfüllt werden kann. Der Speicher wird auf Null initialisiert. Der von malloc oder calloc zurückgegebene Zeiger hat die richtige Ausrichtung für das betreffende Objekt, muss jedoch wie in in den entsprechenden Typ umgewandelt werden

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

Ich weiß bereits, dass malloc (und seine Familie) den Typ void * zurückgibt, und es gibt gute Erklärungen, warum nicht cast malloc .

Aber meine Frage ist: Warum steht in dem Buch, dass ich es besetzen soll?

152
Michi

Von http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm :

In C vor ANSI - wie in K & R-1 beschrieben - gab malloc () einen char * Zurück und es war in allen Fällen, in denen die empfangende Variable nicht auch ein char *. Der neue Typ void * In Standard C macht diese Verzerrungen überflüssig.

Um niemanden vor der Verlegenheit zu bewahren, unnötig zur Verteidigung von K & R-2 zu springen, bat ich Dennis Ritchie um eine Stellungnahme, die ich zur Gültigkeit des oben zitierten Satzes ab Seite 142 zitieren könnte. Er antwortete:

Auf jeden Fall jetzt, wo ich das Zeug auf S. 142, ich denke es ist falsch; Es ist so geschrieben, dass es nicht nur gegen frühere Regeln verteidigt, sondern auch die ANSI-Regeln falsch darstellt.

207
David Ranieri