当前位置: 首页 > news >正文

C动态分配

动态分布与静态发布:

静态分配

      1、 在程序编译或运行过程中,按事先规定大小分配内存空间的分配方式。int a [10]

      2、 必须事先知道所需空间的大小。

      3、 分配在栈区或全局变量区,一般以数组的形式。

      4、 按计划分配。

动态分配

      1、在程序运行过程中,根据需要大小自由分配所需空间。

      2、按需分配。

     3、分配在堆区,一般使用特定的函数进行分配。

动态内存分配函数

1.malloc函数

该函数仅针对于指针使用,使用前需要引用malloc.h函数

void * malloc (unsigned int size)

  • 参数size:

  • size:要开辟的空间的大小

  • 返回值:

  • 成功:开辟好的空间的首地址

  • 失败:NULL

在内存的动态存储区(堆)中分配一个长度为size的连续空间。其参数是一个无符号整数,返回值是一个系统所分配的连续内存空间的起始地址

若分配内存空间失败(如内存不足等原因)则返回NULL。所以,使用前一定要判断是否为NULL

#include <stdio.h>
#include <stdlib.h>
int main(){int num;scanf("%d",&num);int *ptr=(int *)malloc(num*sizeof(int));if(ptr==NULL){printf("内存分配失败!\n");exit(1);}else {printf("success!");}for(int i=0;i<num;i++){scanf("%d",&ptr[i]);}for(int i=0;i<num;i++){printf("%d ",ptr[i]);}putchar('\n');free(ptr);return 0;
}

2.free函数

    #include <stdlib.h>
     void free(void *p)
     功能:释放堆区的动态内存空间
     参数:
     ptr:开辟后使用完毕的堆区的空间的首地址
     返回值:
     无

注意:

  •       free函数只能释放堆区的空间,其他区域的空间无法使用free
  •       free释放空间必须释放malloc或者calloc或者realloc的返回值对应的空间,不能说只释放一部分
  •      free(p); 注意当free后,因为没有给p赋值,所以p还是指向原先动态申请的内存。但是内存已经不能再用了,p变成野指针了,所以一般为了放置野指针,会free完毕之后对p赋 为NULL
  •       一块动态申请的内存只能free一次,不能多次free。

    //使用free函数释放空间
    ferr(p);
    //防止野指针
    p=NULL;

链表的基本概念

链表,是为了实现动态保存一串数据。注意这里的动态是指不需要预先分配内存空间,而是在需要时动态申请内存。整个数据串保存所需的空间可以根据需要扩大或缩小。而设计的一种数据结构。如:

链表的节点结构

1.数据域:用来储存数据

2.指针域:储存下一个节点元素的地址

如果有后继元素,则指针link会指向下一个元素,若无,这指针指向NULL

struct Stu{char name[20];int age;struct Stu *link;
}

http://www.lryc.cn/news/160302.html

相关文章:

  • C语言——程序环境和预处理(再也不用担心会忘记预处理的知识)
  • Docker部署EMQX
  • Spring Cloud(Finchley版本)系列教程(二) 客户端负载均衡Ribbon
  • 好玩的js特效
  • java实现带有html格式和附件的符合RFC822规范的eml格式的信件原文组装
  • 如何使用PyTorch训练LLM
  • uniapp 手机 真机测试 ​ 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可​
  • RTSP流媒体服务器EasyNVR视频平台以服务方式启动异常却无报错,该如何解决?
  • 【List篇】使用Arrays.asList生成的List集合,操作add方法报错
  • c++的类模板里,可以直接为静态变量赋值么?
  • 【录用案例】CCF-C类,1/2区SCIEI,3个月14天录用,30天见刊,11天检索
  • qt day 3
  • SpotBugs检查java代码:在整数上进行没有起任何实际作用的位操作(INT_VACUOUS_BIT_OPERATION)
  • javaWeb录入数据异常,mysql显示错误
  • Vue + Element UI 前端篇(十):动态加载菜单
  • 图的应用(最小生成树,最短路径,有向无环图)
  • python正则表达式笔记2
  • matplotlib 的默认字体和默认字体系列
  • STMCUBEMX_IIC_DMA_AT24C64读取和写入
  • wsl2相关问题
  • 使用idea时,光标变成了不能按空格键,只能修改的vim格式,怎么切换回正常光标
  • vue+antd——实现table表格的打印——分页换行,每页都有表头——基础积累
  • linux C MD5计算
  • vue3学习源码笔记(小白入门系列)------ 组件更新流程
  • 数学建模B多波束测线问题B
  • Pytest 框架执行用例流程浅谈
  • C#__资源访问冲突和死锁问题
  • 机器学习——Logistic Regression
  • 创建husky规范前端项目
  • 深浅拷贝与赋值