c语言中动态内存分配的作用,C语言动态内存分配分析

一:传统数组(静态数组)的缺点

1:数组的长度必须事先指定,并且是常整数,不能是变量 int a[5];2:传统数组程序员无法由程序员释放,只能由系统释放。(并且只能在数组所在函数结束才能释放)3:数组的长度在函数运行期间不能动态的扩充和缩小4:A函数定义的传统数组,在A函数结束时,在B函数中是不能使用的,因为已经释放。也就是传统数组不能跨函数。

区分:静态存储与内存的静态开辟

二:为什么要动态分配内存

用来解决传统数组的四个缺陷

三:动态内存分配举例,以及动态数组的构造

方式:malloc函数,在堆开辟空间

801147853bfe8ec8e1d56f61a05b3b67.png

1:malloc是由程序员在堆栈动态开辟空间2:返回值开辟空间的首地址,但是类型是void *,需要强制类型转换3:分配的内存空间应该能整除类型所占的字节数4:包含头文件malloc.h5:只能用free(p)来释放p所指向的动态开辟的内存空间。6:对动态内存空间的操作,用*p来操作。7:可以用多个指针指向这个动态空间8:当有多个指针只向这个动态空间时,只能用free一个指针,多次重复释放要被报错9:可以将动态开辟的的内存指针作为函数参数

问题:p的分配类型是动态的还是静态的?当调用free(p)后,p的内存空间会被释放么?例子:动态构建一个一维数组:

606a49afb03d97529194a7eaee5daa9a.png

动态扩充数组的长度,也就是在程序运行时动态扩充:realloc(首地址,总共字节数)

作用:将原来动态开辟的动态内存重新开辟一个字节数,如果这个数比以前的大,前面的数据保存。如果比原来的小,保留前面的数据。

b10b6873755cf0ad7cfa20bd340c6366.png

注意:扩充或者缩放的内存单元是新开辟的内存单元。这个过程中有值的拷贝过程。返回值是新开辟的地址空间首地址。

四:静态内存和动态内存的比较

静态开辟的内存:在栈中开辟,由编译器分配,由系统自动释放动态开辟的内存:在堆中开辟,由程序员开辟,由程序员自动释放。

五:跨函数使用内存的问题

af8609fd1be0e8ad21f90feed4a4832f.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值