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

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

3天内不再提示

C语言怎么建立内存的动态分配

jf_78858299 来源:C语言 作者:闫小林 2023-03-10 15:30 次阅读

C语言内存动态分配

在C语言中,全局变量是分配在内存中的静态存储区的,非静态的局部变量,包括形参是分配在内存中的动态存储区的,这个存储区是一个“栈”的区域。

C语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为“堆”。

C语言怎么建立内存的动态分配

malloc函数

函数原型
void *malloc(unsigned int size);

其作用是在内存的动态存储区分配一个长度为size的连续空间。形参size的类型定为无符号整型。此函数是一个指针型函数,返回的指针指向该分配域的开头位置。

calloc函数

函数原型

void *calloc(unsigned n,unsigned size);

其作用是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。

free函数

函数原型

void free(void *p);

其作用是释放指针变量p所指向的动态空间,使这部分空间能重新被其他变量使用。

realloc函数

函数原型

void *realloc(void *p,unsigned int size);

如果已经通过malloc函数或者calloc函数获得了动态空间,想改变其大小,可以用realloc函数重新分配。

C99标准把意思malloc、calloc、realloc函数的基类型定为void类型,这种指针称为无类型指针。

C语言void指针类型

指向void类型应该理解为指向空类型或者不指向确定的类型的数据。

把void指针赋值给不同基类型的指针变量时,编译系统会自动进行转换,不必用户自己进行强制转换。

内存的动态分配主要应用于建立程序中的动态数据结构中。

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

    关注

    8

    文章

    2767

    浏览量

    72772
  • C语言
    +关注

    关注

    180

    文章

    7533

    浏览量

    128787
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70364
收藏 人收藏

    评论

    相关推荐

    FreeRTOS内存动态分配吗?

    你可能会好奇:FreeRTOS可以创建任务,也可以删除任务,它是动态分配内存吗?
    的头像 发表于 03-24 09:55 1820次阅读
    FreeRTOS<b class='flag-5'>内存</b>是<b class='flag-5'>动态分配</b>吗?

    C语言既然可以自动为变量分配内存,为什么还要用动态分配内存呢?

    不知道大家在学习C语言动态分配内存的时候有没有过这样的疑问,既然系统可以自动帮我们分配内存,为什么还需要我们程序员自己去
    发表于 12-13 11:14 762次阅读

    怎么在LL2和DDR3上用malloc同时动态分配内存

    程序中需要用malloc动态分配两块内存,分别在LL2和DDR3上,请问用cmd动态分配的空间都是在.sysmem里面吗?怎么在两块内存中都动态
    发表于 06-21 09:29

    请教关于在堆区的动态分配内存问题

    ;]CmplxSgn_t;在定义信号之后会动态分配一段arrayLen长的内存给ptSignalArray,在信号的使命结束后会把内存释放掉。但是俺刚接触dsp不久,有资料说频繁的申请/释放
    发表于 08-07 08:29

    为什么lwip建立TCP客户端时不动态分配本地端口?

    最近这两天,在做EtherNet/IP协议。STM32作为客户端,连接远程服务端。现在遇到一个问题,在建立TCP客户端时,远程端口为44818,分配的本地端口一直为49153。按照我对TCP的了解,本地端口应该是动态分配的,为什
    发表于 08-29 20:48

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

    memset函数free内存时,需要把指针变量置为NULL,防止其变为野指针memset(void* Dst, int Val, size_t size)作用:把Dst中大小为size的内容全部由Val替换符合编程规范的动态分配内存
    发表于 12-14 06:37

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

    在使用完毕后,需要显式的释放之,这就要求程序员对动态分配内存了然于胸。在非常重视安全(safety-critical)的嵌入式C语言程序开发中,
    发表于 12-15 06:10

    使用动态内存分配安全吗

    安全吗?”为了更加安全稳定,美国军方禁止在C语言程序中使用malloc()使用动态内存分配安全吗?在C
    发表于 12-15 07:44

    可以使用malloc()和free()这两个函数动态分配内存和释放内存

    在ANSI C中,可以使用malloc()和free()这两个函数动态分配内存和释放内存,但是,在嵌入式操作系统中,调用malloc()和free()(不可重入函数)却是很危险的(由于
    发表于 12-17 08:26

    CH545芯片可以使用malloc函数进行内存动态分配嘛?

    如题,请问贵公司的单片机芯片(如CH545)可以使用malloc函数进行内存动态分配嘛?
    发表于 06-24 12:46

    请问没有MMU的ARM芯片是否支持使用malloc()函数动态分配内存呢?

    请问没有MMU的ARM芯片是否支持使用malloc()函数动态分配内存呢?求解答|
    发表于 10-17 15:41

    LPCXpresso55S16如何从闪存中动态分配内存

    我正在使用 LPCXpresso55S16,我想从闪存中动态分配内存,向其中写入数据,从中读取数据,并在需要时释放它。是否有教程或任何人都可以帮助我吗?
    发表于 06-09 06:57

    动态分配内存知识

    最近学习动态分配内存 这个程序是我自己编的,呵呵,好有成就感啊... #include stdio.h/*Feng原创...*/ #define N 2 char *GetCity(void
    发表于 05-28 15:27 99次下载

    零矢量动态分配的-直接转矩控制

    零矢量动态分配的-直接转矩控制
    发表于 01-21 11:49 1次下载

    51单片机内存动态分配

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