黑马程序员技术交流社区

标题: C语言学习笔记:内存管理:内存分配函数 [打印本页]

作者: 弥修斯    时间: 2015-7-11 19:27
标题: C语言学习笔记:内存管理:内存分配函数
内存分配函数三:
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’。



作者: aludiba    时间: 2015-7-11 20:43
学习了~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2