首页 文章

为什么这本书说我必须施放malloc?

提问于
浏览
150

今天我到了The C Programming Language (second edition Brian W. Kernighan & Dennis M. Ritchie)167 页面,发现作者说我必须施放 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* 和there are good explanations why not to cast malloc .

但我的问题是:为什么这本书说我应该施展它?

1 回答

  • 204

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

    在ANSI-C之前 - 如K&R-1中所述 - malloc()返回一个char *,并且必须在接收变量不是char *的所有情况下转换它的返回值 . 标准C中的新void *类型使得这些扭曲变得不必要 . 为了拯救任何人不必要地躲避K&R-2辩护的尴尬,我问Dennis Ritchie一个意见,我可以引用上面引用的第142页上述句子的有效性 . 他回答说:无论如何,现在我重读p上的内容 . 142,我认为这是错的;它是以这样的方式编写的,它不仅仅是对早期规则的防御,它歪曲了ANSI规则 .

相关问题