【c语言】动态内存管理(下)
动态函数的介绍:malloc free calloc realloc
动态函数的介绍:malloc free calloc realloc
三、calloc函数
函数的参数形式: void* calloc(size_t num , size_t size )
其中void*是一个可以接受任意类型的指针,size_t表示的是unsigned int(无符号整型)
num表示的是多少个元素,size表示的是一个元素的大小,单位是字节。
calloc函数介绍:
1. calloc函数也是向内存申请空间的,若是申请成功则会返回一个指向内存首地址的指针,
若是申请失败,则会返回一个NULL(空指针),所以使用该函数也是需要进行判断是否为
非空指针,否则程序会出错。
2.calloc函数和malloc函数不同之处在于,calloc函数会将所申请到的内存空间全部
初始化成0,而malloc函数则不会,这就意味着calloc比malloc运行时间更长,
所以在选择这两个函数时可以根据是否需要初始化来选择。
calloc的使用例子:
四、realloc函数
函数的参数形式:void* realloc(void*ptr , size_t num);
其中void*ptr是要被改变的指针指向的地址,size_t num是改变之后的大小,单位是字节
realloc函数介绍:
1.realloc是一个专门用来调整申请动态内存的大小。(也是要和free函数配套使用)
2.若realloc要扩大申请的空间,如果原始空间后有位置可追加则就在原指针之后进行追加,
如果不够则另外找一块新的空间来,并且把存在旧的内存里的数据移动到新的内存空间,
并且释放旧的内存空间给操作系统,返回一个指向新的内存地址的指针。
3. realloc改变所申请空间的大小和上述函数类似,若申请失败则返回一个空指针,所以
要判断所返回的值是否为非空,若为非空指针,则可以*ptr=*p。
(其中*ptr为旧的指针*p为新的指针)
注:若是将空指针赋值给*ptr,则原始内容地址将丢失(内存泄漏)
4.realloc函数功能较强大还可以实现malloc函数的功能,如 void* realloc(NULL,size_t size);
就是只需对NULL进行追加即可,它等价于void* malloc(size_t size);
realloc函数的使用例子:
祝愿各位小伙伴们学有所成!!!!
- 点赞
- 收藏
- 关注作者
评论(0)