A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qhw_fight 中级黑马   /  2016-4-5 22:30  /  845 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

malloc 函数的原型:
(void *)malloc(int size)
malloc 函数的返回值是一个 void 类型的指针,参数为 int 类型数据,即申请分配的内存 大小,单位是 byte。内存分配成功之后,malloc 函数返回这块内存的首地址。你需要一个指 针来接收这个地址。但是由于函数的返回值是 void *类型的,所以必须强制转换成你所接收 的类型。也就是说,这块内存将要用来存储什么类型的数据。比如:
char *p = (char *)malloc(100);
在堆上分配了 100 个字节内存,返回这块内存的首地址,把地址强制转换成 char *类型后赋 给 char *类型的指针变量 p。同时告诉我们这块内存将用来存储 char 类型的数据。也就是说 你只能通过指针变量 p 来操作这块内存。这块内存本身并没有名字,对它的访问是匿名访 问。
上面就是使用 malloc 函数成功分配一块内存的过程。但是,每次你都能分配成功吗? 不一定。上面的对话,皇帝让户部侍郎查询是否还有足够的良田未被分配出去。使用 malloc 函数同样要注意这点:如果所申请的内存块大于目前堆上剩余内存块(整块),则内存分配 会失败,函数返回 NULL。注意这里说的“堆上剩余内存块”不是所有剩余内存块之和,因 为 malloc 函数申请的是连续的一块内存。
既然 malloc 函数申请内存有不成功的可能,那我们在使用指向这块内存的指针时,必 须用 if(NULL != p)语句来验证内存确实分配成功了。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马