为什么书说我必须投malloc?
今天我到了C编程语言(第二版Brian W. Kernighan&Dennis M. Ritchie)的第167页,发现作者说我必须投入malloc
。 这是书中的一部分:
7.8.5存储pipe理
函数malloc和callocdynamic获取内存块。
void *malloc(size_t n)
返回一个指向未初始化存储的n个字节的指针,如果请求不能满足,则返回NULL。
void *calloc(size_t n, size_t size)
为指定大小的n个对象返回一个指向足够空闲空间的指针;如果请求不能满足,则返回NULL。 存储初始化为零。 malloc或calloc返回的指针对于所讨论的对象具有正确的alignment方式,但是必须将其转换为适当的types,如
int *ip; ip = (int *) calloc(n, sizeof(int));
我已经知道malloc
(和它的系列)返回typesvoid * ,并有很好的解释为什么不投出malloc
。
但是我的问题是:为什么这本书说我应该投它?
从http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm :
在ANSI C之前 – 如K&R-1所述 – malloc()返回一个
char *
并且在接收variables不是char *
所有情况下,都必须使用它的返回值。 标准C中新的void *
types使得这些扭曲是不必要的。为了避免任何人不必要的跳跃到K&R-2防御的尴尬境地,我问了丹尼斯·里奇(Dennis Ritchie)的意见,我可以引用第142页上面引用的句子的有效性。他回答说:
无论如何,现在我重读了p。 142,我认为这是错的; 它是这样写的,它不仅仅是对早期规则的防御,而是错误地expression了ANSI规则。