0
点赞
收藏
分享

微信扫一扫

动态内存分配

动态内存分配的函数:malloc,free,calloc,realloc

1.malloc:用来开放空间的内存

·​如果开辟成,则返回一个指向开辟好空间的指针

·​如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查

·​返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定

·​如果参数size为0,malloc的行为是标准是未定义的,取决于编译器

2.free:用来释放动态开辟的内存

·​如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的

·​如果参数ptr是NULL指针,则函数什么事都不用做

3.calloc

·​函数的功能是为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0

·​于函数malloc的区别只在于calloc会在返回地址之前把申请的空间的每个字节初始化全为0

4.realloc:调整动态开辟空间的大小

·​realloc函数的出现让动态内存管理更加灵活

·​有时我们会发现过去申请的空间太小,有时候我们又觉得申请的空间过大,那为了合理的内存,我们一定会对内存大小做灵活的调整,那realloc函数就可以做到对动态开辟内存大小的调整。

注意事项:(1)如果p指向空间之后有足够的内存空间可以追加,则直接追加,后返回p

                (2)如果p指向空间之后没有足够的内存空间可以追加,则realloc函数会重新找一个新的内存区域,开辟一块满足需求的空间,并且把原来内存中的数据拷贝会来,释放旧的内存空间,最后返回新开辟的空间地址

                (3)得用新的变量来接受realloc函数的返回值

5.常见的动态内存错误

·​​对NULL指针的解引用操作

·​对动态开辟空间的越界访问

·​对非动态开辟内存使用free释放

·​使用free释放一块动态开辟内存的一部分

·​对同一块动态内存多次释放

·​动态开辟内存忘记释放(内存泄漏):动态开辟空间一定要释放,并且正确释放

举报

相关推荐

0 条评论