0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

Q4MP_gh_c472c21 来源:未知 作者:李倩 2018-07-10 16:41 次阅读

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136120
  • 函数
    +关注

    关注

    3

    文章

    4303

    浏览量

    62411
  • 数组
    +关注

    关注

    1

    文章

    414

    浏览量

    25905

原文标题:C语言动态内存分配基础知识详解

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    动态内存管理模块的设计原理与实现

    以及被释放的时候,Fense又从st_Head中删除之,检查st_Head中的节点即可得到未被释放的本节点的数值校验和等。Fense将每一个分配动态内存块插入到链表st_Head中;当此内存
    的头像 发表于 06-30 08:05 2327次阅读
    <b class='flag-5'>动态内存</b>管理模块的设计原理与实现

    C语言知识总结:动态内存分配

    动态内存分配就 是指在程序执行的过程中动态分配或者回收存储空间的分配内存的方法。
    发表于 10-24 15:52 836次阅读

    C语言程序设计中动态内存分配如何实现

    C语言程序设计中,动态内存分配如何实现,需要注意哪些问题?
    发表于 09-28 16:53 1274次阅读

    请问CCS下怎么使用malloc之类动态内存函数?

    的采样点数不确定,即电压采样值个数不确定,从而存放电压采样值的数组大小不能事先确定,需要根据条件判断,动态确定数组的大小。所以,现在我打算使用动态内存
    发表于 05-23 16:31

    内存动态内存分配实现

    第27章 STM32H7的TCM,SRAM等五块内存动态内存分配实现本章教程为大家分享一种DTCM,SRAM1,SRAM2,SRAM3和SRAM4可以独立管理的动态内存管理方案,在实
    发表于 08-03 07:14

    如何在单片机上也可正常使用动态内存分配

    51单片机内存动态分配序言最近玩51单片机碰到一个问题,51中malloc函数并不能像在PC上一样正常运行,这涉及到了内存池的概念。下面就来演示一下如何在单片机上也可正常使用动态内存
    发表于 11-19 07:36

    嵌入式C语言动态内存分配

    动态内存分配:1、malloc、memset、free在日常写代码时需要注意以下几点:malloc分配内存时,需要 if语句 判断malloc是否成功
    发表于 12-14 06:37

    请问使用动态内存分配安全吗?

    想在C语言程序员之间开始一个激烈的,或者说有争议的讨论很简单,只需要问:“使用动态内存分配安全吗?”使用动态内存分配安全吗?在C语言程序开发中,动态
    发表于 12-15 06:10

    使用动态内存分配安全吗

    [导读]想在C语言程序员之间开始一个激烈的,或者说有争议的讨论很简单,只需要问:“使用动态内存分配安全吗?”想在C语言程序员之间开始一个激烈的,或者说有争议的讨论很简单,只需要问:“使用动态内存
    发表于 12-15 07:44

    动态内存分配是什么意思

    所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态分配或者回收存储空间的分配
    发表于 12-17 08:17

    RTThread的动态内存空间该如何去分配

    结束地址划分作为动态内存,而NANO版本好像是开辟了一个静态数组,这时候的动态内存划分位置就是位于BSS段2、使用malloc等系统函数分配到的内存
    发表于 08-31 14:34

    动态内存错误的静态检测

    内存泄漏、空指针引用等动态内存错误在/,/LL等支持动态内存操作的程序中普遍存在在程序中,动态内存管理错误是导致动态内存错误的根本原因
    发表于 06-10 16:29 52次下载
    <b class='flag-5'>动态内存</b>错误的静态检测

    嵌入式中需要用到动态内存

    所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态分配或者回收存储空间的分配
    的头像 发表于 07-27 08:11 3039次阅读

    静、动态内存的优劣比较

    动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时
    的头像 发表于 08-06 18:25 6590次阅读

    嵌入式C语言中的动态内存管理和动态内存分配

    动态内存管理同时还具有一个优点:当程序在具有更多内存的系统上需要处理更多数据时,不需要重写程序。
    发表于 08-15 17:16 2259次阅读