Dziś doszedłem strona 167 z The C Programming Language (wydanie drugie Brian W. Kernighan i Dennis M. Ritchie) i okazało się, że autor mówi muszę rzucać malloc
. Oto część z książki:
7.8.5 Zarządzanie pamięcią masową
Funkcje malloc i calloc dynamicznie uzyskują bloki pamięci.
void *malloc(size_t n)
zwraca wskaźnik do n bajtów niezainicjowanej pamięci lub NULL, jeśli żądanie nie może zostać spełnione.
void *calloc(size_t n, size_t size)
zwraca wskaźnik do wystarczającej ilości wolnego miejsca dla tablicy n obiektów o określonym rozmiarze lub NULL, jeśli żądanie nie może zostać spełnione. Pamięć jest inicjalizowana na zero. Wskaźnik zwrócony przez malloc lub calloc ma właściwe wyrównanie dla danego obiektu, ale musi zostać rzutowany na odpowiedni typ, jak w
int *ip; ip = (int *) calloc(n, sizeof(int));
Wiem już, że malloc
(i jego rodzina) zwraca typ void * i są dobre wyjaśnienia, dlaczego nie rzutowaćmalloc
.
Ale moje pytanie brzmi: dlaczego książka mówi, że powinienem ją rzucić?
void *
i nie został zaktualizowany. Zobacz także tę odpowiedź .malloc
ponieważ NIE jest to C ++ - z wyjątkiem sytuacji, gdy musisz - ale nie powinieneś - z wyjątkiem ... AGGGHHHHHH !!!!! :-)Odpowiedzi:
Z http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm :
źródło
char*
niechar
. Te dwa są bardzo różne.