calloc,ralloc如何使用,使用的注意事项

来源:互联网 发布:渔民之家钓鱼源码 编辑:程序博客网 时间:2024/06/09 17:10
三个函数都在<stdlib.h>文件中,其中void * 是万能指针,但是不能取值,一般需要什么数据类型,就用什么数据类型;若是全用void *,则可能引起越界或不完整。如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当分配的内存不再使用时,需要使用free()函数将其释放掉。
malloc():
功能是分配长度为size字节的字节块。malloc不初始化内存空间,也就是依然保留着这段内存里的数据,可能引起一些数据的错误。malloc需要我们计算字节数,如果想要分配5个int型的空间,那就是说需要5*sizeof(int)的内存空间:
[cpp] view plain copy
int * p;  
    p = (int*)malloc( sizeof (int) * 5 );  
calloc():
calloc在动态分配完内存后,自动初始化该内存空间为零,避免了一些错误。malloc不需要计算字节数:
[cpp] view plain copy
p = ( int* )calloc( 5, sizeof(int) );  
     但是malloc效率更高,而且很容易实现calloc的功能,所以一般不会用calloc函数。


realloc():
realloc()是给一个已经分配了地址的指针重新分配空间,参数mem_address为原有的空间地址,newsize是重新申请的地址空间。这样可以开辟更多的内存空间,也可以缩小内存空间,但是被缩小后的那一部分的数据将会丢失。    
实现原理:
malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 发现自己被三了怎么办 被扇巴掌脸肿了怎么办 分到上海市金鼎学校怎么办 被列入维稳对象怎么办? 资金涉及诈骗案冻结了怎么办 小米浏览器浏览记录找不到了怎么办 米聊账号封了怎么办 管家婆创业版管理员忘记密码怎么办 手机不记得密码了怎么办 手机不记得开锁密码怎么办 oppo手机不记得密码怎么办 电脑密码不记得了怎么办 vivo手机不记得密码了怎么办 运管把车扣了怎么办 大学通选课挂科怎么办 通识必修课挂了怎么办 我想开3d艺术馆怎么办 档案回原籍报到证怎么办 服刑的人孩子上学怎么办 长沙终身教育网用户名忘记了怎么办 乡下卖服装没生意怎么办 没能力没学历该怎么办 没有学历的我该怎么办 补过的牙掉了怎么办 法院判完被告不给钱怎么办 b证到期未继续教育怎么办 宝宝上幼儿园中午要用尿不湿怎么办 嫁到北京农村怎么办居住证 2020年没脱贫的农民怎么办 2020年农民的土地怎么办 车停在停车场被划怎么办 专升本差两分怎么办 入职需要学士学位证怎么办 不喜欢写科研项目又没编制怎么办 易学堂密码忘了怎么办 易班手机号换了怎么办 易班登录不上怎么办 易到手机号换了怎么办 海外留学没有教育部认证怎么办 七过月宝宝便秘怎么办 6个月孩子便秘怎么办