千家信息网

C语言如何实现动态内存的分配

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关C语言如何实现动态内存的分配的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C 程序中,不同数据在内存中分配说明1)全局变量——内存中的静态存储区2
千家信息网最后更新 2026年11月03日C语言如何实现动态内存的分配

这篇文章给大家分享的是有关C语言如何实现动态内存的分配的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

C 程序中,不同数据在内存中分配说明

1)全局变量——内存中的静态存储区

2)非静态的局部变量——内存中的动态存储区——stack 栈

3)临时使用的数据—建立动态内存分配区域,需要时随时开辟,不需要时及时释放——heap 堆

4)根据需要向系统申请所需大小的空间,由于未在声明部分定义其为变量或者数组,不能通过变量名或者数组名 来引用这些数据,只能通过指针来引用)

内存动态分配的相关函数

1)头文件#include 声明了四个关于内存动态分配的函数

2)函数原型 void * malloc(usigned int size) //memory allocation

  • 作用——在内存的动态存储区(堆区)中分配一个长度为 size 的连续空间。

  • 形参 size 的类型为无符号整型,函数返回值是所分配区域的第一个字节的地址,即此函数是一个指针型函数, 返回的指针指向该分配域的开头位置。

  • malloc(100); 开辟 100 字节的临时空间,返回值为其第一个字节的地址

3)函数原型void *calloc(unsigned n,unsigned size)

作用——在内存的动态存储区中分配 n 个长度为 size 的连续空间,这个空间一般比较大,足以保存一个数组用 calloc 函数可以为一维数组开辟动态存储空间,n 为数组元素个数,每个元素长度为 size.函数返回指向所分配域的起始位置的指针;分配不成功,返回 NULL。p = calloc(50, 4); //开辟 50*4 个字节临时空间,把起始地址分配给指针变量 p

4)函数原型:void free(void *p)

作用——释放变量 p 所指向的动态空间,使这部分空间能重新被其他变量使用。p 是最近一次调用 calloc 或 malloc 函数时的函数返回值free 函数无返回值free (p ); // 释放 p 所指向的已分配的动态空间

5) 函数原型void *realloc(void *p,unsigned int size)

作用——重新分配 malloc 或 calloc 函数获得的动态空间大小,将 p 指向的动态空间大小改变为 size,p 的值不 变,分配失败返回 NULLrealloc(p, 50); // 将 p 所指向的已分配的动态空间 改为 50 字节

6)返回类型说明

应用实例

动态创建数组,输入 5 个学生的成绩,另外一个函数检测成绩低于 60 分的,输出不合格的成绩。

代码演示

#include #include int main() {        void check(int *);        int * p,i; // 在堆区开辟一个 5 * 4 的空间,并将地址 (void *) , 转成 (int *) , 赋给 p        p = (int *)malloc(5*sizeof(int));        for( i = 0; i < 5; i++) {                scanf("%d", p + i);        }        check(p); //        free(p); //销毁 堆区 p 指向的空间 getchar(); getchar();        return 0;}void check(int *p) {        int i;        printf("\n不及格的成绩 有: ");        for(i =0; i < 5; i++) {                if(p[i] < 60) {                        printf(" %d ", p[i]);                }        }}

动态分配内存的基本原则

1)避免分配大量的小内存块。分配堆上的内存有一些系统开销,所以分配许多小的内存块比分配几个大内存块的 系统开销大

2)仅在需要时分配内存。只要使用完堆上的内存块,就需要及时释放它(如果使用动态分配内存,需要遵守原则: 谁分配,谁释放), 否则可能出现内存泄漏

3)总是确保释放以分配的内存。在编写分配内存的代码时,就要确定在代码的什么地方释放内存

4)在释放内存之前,确保不会无意中覆盖堆上已分配的内存地址,否则程序就会出现内存泄漏。在循环中分配内 存时,要特别小心

5)指针使用一览

感谢各位的阅读!关于"C语言如何实现动态内存的分配"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

内存 分配 动态 函数 空间 变量 指向 指针 数组 地址 字节 存储 作用 原型 成绩 代码 大小 数据 系统 长度 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 为想互联网科技怎么样 云信互联网科技有限公司 涨乐互联网科技 广州互联网科技公司 互联网 的科技创新 善班互联网科技 美国互联网黑科技 融贸通互联网科技 居家互联网科技有限公司 镁科技互联网资讯平台 济南和联互联网科技有限公司 成都玖崟互联网科技有限公司乐商圈怎么样 玖二柒互联网科技公司待遇 团飞科技与伯堂互联网服务平台 中国航天科技大学国际工业互联网 杭州披云加互联网科技有限公司 富国互联网金融科技混合基金 互联网科技接地气 普陀区互联网教育科技管理办法 青岛易易互联网科技 互联网科技公司华为 互联网与科技发展 没上市的科技互联网公司 深圳互联网科技公司 科技互联网公司logo 互联网汽车科技小镇 成都铂石互联网科技做什么的 互联网第三次科技革命特征 容联科技互联网电商 平安好医生打造互联网科技医疗
0