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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 初见兔儿哥 中级黑马   /  2015-8-3 21:41  /  394 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内存分配函数三:
void* malloc( n*sizeof([数据类型]) );
void* calloc( 空间块数 , sizeof[数据类型] );
void* realloc( void* ptr, n*sizeof([数据类型]));     ps:在stdlib.h函数库内,要先引用


malloc
功能:分配长度为num字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
        当内存不再使用时,应使用free()函数将内存块释放。

callo
功能:为具有num个长度size元素的数组分配内存
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
        当内存不再使用时,应使用free()函数将内存块释放。

realloc
功能:改变num所指内存区域的大小为newsize长度。
说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
        当内存不再使用时,应使用free()函数将内存块释放。
ps:先检测被扩充空间往下的内存空间是否已被使用:如果未被使用,直接进行扩充;否则,重新在空闲的地方定义一个newsize的空间。

区别:
1、calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据
2、realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度

另:memset
标准:memset( [需初始化的空间] , [要设置的字符] , [存储空间长度] )
如: memset( p, 'a',16)
即:将内存空间中所有存储空间赋值 ‘a’。

0 个回复

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