【C语言】为什么存在动态内存分配


前言

提示:我们先来看一个在vs编译器下,同学们常犯的错误
在这里插入图片描述

在这里插入图片描述

注意:在VS编译器下C语言是不支持变长数组的,我们应该输入一个常量值,如struct Stu s[100]={0};在C99中是支持变长数组的,不同编译器不同,gcc是支持C99的。

一、动态内存分配

定义

我们平常定义的局部变量都是在栈上分配空间的,(1)开辟的空间都是固定的大小,(2)数组在声明的时候,必须指定数组长度,它所需要的内存在编译时分配。这种分配固定大小内存的分配方法也称静态内存分配,与之相对的,就是动态内存分配。

动态内存分配的空间是在堆区申请的,不是在栈上申请的。
动态内存分配的空间由我们手动释放,由free()函数完成。而栈上开辟的空间函数调用完后会自动释放内存。

二、动态内存分配的意义

1.可以控制所开辟的内存大小

在很多时候,比如通讯录,学生管理表等等,我们不知道在为了会存下多少联系人,多少学生。如果我们用静态内存开辟就存在问题,可能会开辟少了,之后联系人和学生都存不了,可能会开辟多了,导致内存浪费。而动态内存就可以解决这个问题,我们可以用relloc控制大小,当内存达到申请的空间时,我们可以主动再申请连续的空间,进行扩容。

2.可以多次利用这部分空间

静态内存分配的空间,只有在程序结束时才会自动释放给系统。如果你都在栈区上开辟空间,对于大程序来说,还没运行完,内存就可能被占完了,此时就会发生内存泄漏。

而动态内存分配的空间,如果你用完了(比如你开辟了一块空间,打印10个元素,打印好了),我们可以用free()函数释放这块空间,并把维护这块空间的指针置为空指针。当再次用动态内存申请空间时,就可以再次利用这块空间。一定程度上可以节省空间。

三,动态内存函数的介绍

malloc free calloc realloc

这几个动态内存分配函数会在我的博客分别详解,有需要了解栈区,堆区,静态区的见我的博客:【C语言】初识内存开辟/分配

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_麦子熟了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值