目录
一、为什么会存在动态内存
二、动态内存函数1.malloc和free2.calloc3.realloc三、动态内存函数常见错误
2.对NULL指针进行解引用操作
3.使用free释放一
很显然静态分配内存分配在一些场景,就暴露出它的弊端。如果在开发之前,我们不知道空间的需求,我们有时只有在程序运行的时候才能知道自己所需要空间大小,这时候我们只能使用动态分配内存了。
malloc函数的参数只有一个size_tsize,向内存申请一块连续可用的空间,有几点需要注意
free函数是和malloc配套使用的,每次在堆开辟动态空间后,程序结束之前,必须进行空间释放,不然会出现动态空间泄露,在使用free时,仍需要注意几点
这里我们可以发现,虽然动态内存进行free释放,但指针仍然指向被释放的动态内存的地址,如果不置空,就会造成野指针,非法访问的问题。
calloc和malloc最大的区别就是,malloc只负责对内存进行动态开辟,但calloc不仅开辟,还进行初始化。
我们调试一把可以发现,calloc在开辟空间时同时进行了初始化。所以如何我们对申请的内存空间的内容要求初始化,那么可以很方便的使用calloc函数来完成任务。
当我们一次开辟动态内存不够大的时候,realloc让动态内存更加的灵活。realloc几个参数:
为什么还要返回调整后内存的地址,不是直接就开辟好了吗?其实reallloc函数在开辟时有以下两种情况:
情况2:没有足够的空间,在堆上找一个大小合适的连续空间。所以函数返回的是一个新的内存地址。
第一个free已经将堆空间的动态内存进行释放,此时src已经是一个野指针,在进行释放是十分危险的。
这里test函数确实把字符串地址传给了src,但是字符串是局部变量,当函数执行完之后,就销毁了,所以src输出的内容是随机的。
看到这里大家对动态内存管理已经有了一定的认识,应该特别注意这几点,在进行动态内存开辟之后进行判断是否为空,使用完后进行free释放,并且置空,防止动态内存泄露,只要记住这几点基本就可以很好的使用动态内存了。
以上就是深入了解C语言的动态内存管理的详细内容,更多关于C语言动态内存管理的资料请关注编程网其它相关文章!