文章目录

  • 前言
  • 一、动态内存分配
    • 定义
  • 二、动态内存分配的意义
    • 1.可以控制所开辟的内存大小
    • 2.可以多次利用这部分空间
  • 三,动态内存函数的介绍

前言

提示:我们先来看一个在vs编译器下,同学们常犯的错误

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

一、动态内存分配

定义

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

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

二、动态内存分配的意义

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

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

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

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

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

三,动态内存函数的介绍

malloc free calloc realloc

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

【C语言】为什么存在动态内存分配相关推荐

  1. c语言链表内存分配失败,链表的C语言实现之动态内存分配

    链表的C语言实现之动态内存分配 來源:互聯網  2008-06-01 02:05:07  評論 一.为什么用动态内存分配 但我们未学习链表的时候,假如要存储数量比较多的同类型或同结构的数据的时候,总是 ...

  2. c语言链表动态分配内存,链表的C语言实现(含动态内存分配)

    转自:http://blog.csdn.net/21aspnet/article/details/146968 链表的C语言实现(含动态内存分配) 上 链表的C语言实现之动态内存分配 一.为什么用动态 ...

  3. C语言中的动态内存分配

    大家好,今天简单讲一讲C语言中的动态内存分配. 补充:C程序中的内存块. 在C程序中,通常将内存划分为以下六个区域: (1)内核区域.这块区域是操作系统的,用户不能使用. (2)栈区.主要用于存放运行 ...

  4. c语言 malloc_C语言快速入门——动态内存分配

    在前面一系列的字符串操作中,我们都是先定义一个固定大小的字符数组,然后根据所需,或拷贝.或连接.或格式化来为这个数组提供内容.固定大小的数组意味着在程序运行期间,数组所占用的内存是确定的(即划分了固定 ...

  5. C语言 :学习动态内存分配

    文章目录 C语言动态分配 为什么存在内存分配? 动态内存函数的介绍 `malloc` `free` `free`函数的**作用原理**是: 使用后将指针赋为`NULL` `calloc` 运用一次`c ...

  6. C语言学习笔记---动态内存分配

      数组在内存中时存储在连续的位置上,当声明一个数组的时候,编译器就会在内存中分配它所需要的空间,但是有时候还需要使用动态内存为数组分配空间.   比如现在要同统计一个班级学生的成绩,可以申请一个固定 ...

  7. C++和C语言中的动态内存分配的区别

    在C语言和C++中都会用到动态内存的申请分配的问题,两者之间申请动态内存分配还是区别的. 在C++中的动态内存的分配 1.C++通过new关键字进行动态内存的分配.new关键字是C++内置的一个关键字 ...

  8. c语言的四个函数,C语言学习之动态内存分配的四个函数

    前面中我们了解到: int n; int arr[n]; 这样定义数组是不可取的,不能用此方法给数组分配动态内存,那怎么样才能实现这种可能呢? 接下来我将关于动态内存的知识做以下总结. 有关动态内存的 ...

  9. C语言,为什么动态内存分配申请后,还要再释放?

    比如main函数里有一句 malloc(), 后面没有free() 1.那么当main结束后,动态分配的内存不会随之释放么? 2.如果程序结束能自动释放,那么还加上free(),是出于什么考虑? 1. ...

  10. C语言数组用到的动态内存分配

    动态内存分配 在学习数组的过程中,在输入数组时,原本想过scanf定义数组的大小再输入数组的各值,却报错. 发现原因: 1.定义数组的时必须指定数组长度 2.数组长度是在编译期就必须决定的 所以此时需 ...

最新文章

  1. javax/management/DynamicMBean
  2. SAP MM 采购价格里的阶梯价格
  3. python猜数游戏在程序中预设一个_一道Python简单程序结构练习题
  4. CTF短秘钥的RSA解密
  5. java join使用实例_Java多线程中关于join方法的使用实例解析
  6. 卷积神经网络结构_卷积神经网络
  7. 响应式设计之 —— 视口
  8. 营收放缓、股价暴跌、高管离职,Facebook迎来至暗时刻?
  9. IIFP之牛刀小试(初识篇)
  10. 怎么样写一个 node.js模块以及NPM Package
  11. java day of month_Java LocalDateTime getDayOfMonth()用法及代码示例
  12. 希望是一个全新的开始
  13. 《行为科学统计7e(Statistics for the Behavioral Sciences 10e)》 Introduction to Statistics
  14. JDK安装 Java环境配置
  15. 系统指定的路径不存在,怎么办
  16. 合肥有哪些不错的 IT 公司?
  17. Web 通信 之 长连接、长轮询
  18. 补天漏洞平台为什么能吸引众多白帽和企业?
  19. 联想Lenovo IdeaPad-100s-14IBR安装win7系统
  20. Web前端HTML+CSS全套(1~20)

热门文章

  1. ngrok实现内网穿透,让家里的笔记本也能做服务器
  2. 高端大气通用企业介绍PPT模板
  3. python中(start, end,step ) 解释range()函数 和 切片操作
  4. 1.1 DB DBMS DBA DBS简述
  5. 常用快捷键及DOS命令
  6. 安装python3教程
  7. 四大跨境电商平台对比:亚马逊、ebay、速卖通、wish
  8. 安卓通过DIRECT IO和加密TF卡通信
  9. 《梦回水浒》玩家交流QQ群
  10. 2021年上半年信息系统项目管理师上午试题解析(三)