Почему в книге говорится, что я должен бросить Маллока?


сегодня я добрался до страницы 167 на язык программирования C (второе издание Brian W. Kernighan & Dennis M. Ritchie) и обнаружил, что автор говорит, что я должен бросить malloc. Вот часть из книги:

7.8.5 Управление Хранилищем

функции malloc и calloc получают блоки памяти динамически.

void *malloc(size_t n)

возвращает указатель на n байт неинициализированной памяти, или null если запрос не может быть удовлетворен.

void *calloc(size_t n, size_t size)

возвращает указатель на достаточное свободное пространство для массива из n объектов указанного размера или NULL, если запрос не может быть удовлетворен. Хранилище инициализируется до нуля. Указатель, возвращаемый malloc или calloc, имеет правильное выравнивание для рассматриваемого объекта, но он должен быть приведен в соответствующий вид, как в

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

Я уже знаю, что malloc (и его семейство) возвращает тип void* и есть хорошие объяснения, почему не бросить malloc.

но мой вопрос: почему книга говорит, что я должен бросить его?

1 149

1 ответ:

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

в pre-ANSI C -- как описано в K&R-1 -- malloc () возвратил a char * и необходимо было привести его возвращаемое значение во всех случаях, когда получающая переменная также не была char *. Новый void * тип в Стандарт C делает эти искажения ненужными.

чтобы спасти кого-нибудь от смущения, напрасно прыгая в воду. защита K&R-2, я спросил Денниса Ричи о мнении, которое я мог бы цитата о действительности приведенного выше предложения со страницы 142. Он ответил:

в любом случае, теперь, когда я перечитал материал на стр. 142, я думаю, что это неправильно; это написано таким образом, что это не просто защита в отличие от предыдущих правил, он искажает правила ANSI.