C动态分配

动态分布与静态发布:

静态分配

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

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

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

4、 按计划分配。

动态分配

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

2、按需分配。

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

动态内存分配函数

1.malloc函数

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

void*** malloc (unsignedintsize)**

  • 参数size:

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

  • 返回值:

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

  • 失败:NULL

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

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

objectivec 复制代码
#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

objectivec 复制代码
struct Stu{
   char name[20];
   int age;
   struct Stu *link;
}
相关推荐
91刘仁德2 小时前
传输层协议深度拆解:端口寻址、UDP 报文与 TCP 可靠性机制全解析
linux·网络·c++·网络协议·tcp/ip·udp·c
C++ 老炮儿的技术栈17 小时前
不一样的数值交换
数据结构·c++·人工智能·算法·c·csdn开发云
C++ 老炮儿的技术栈17 小时前
main函数之后的调用
c语言·c++·人工智能·qt·mfc·c
C++ 老炮儿的技术栈3 天前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
haliu3 天前
【FHE 同态加密】我们如何实现同态加密推理(十六):未完成清单与已知边界(同态加密推理的精度、性能与安全)
人工智能·嵌入式·c·fhe·推理引擎·c11·边缘推理·同态加密推理
haliu4 天前
【FHE 同态加密】我们如何实现同态加密推理(十五):实测账本——一跳 1.8 小时,钱花在哪(同态加密推理性能剖析)
人工智能·嵌入式·c·fhe·推理引擎·c11·边缘推理·同态加密推理
haliu5 天前
【FHE 同态加密】我们如何实现同态加密推理(十四):为什么 `RESULT=PASS` 不是判据(纯 C11 · 零依赖)
人工智能·嵌入式·c·fhe·推理引擎·c11·边缘推理·同态加密推理
haliu6 天前
【FHE】(十三):位级可复现性——4 线程与 8 线程为什么算出不同的结果
人工智能·嵌入式·c·fhe·推理引擎·c11·边缘推理·同态加密推理
haliu7 天前
【FHE】(十二):为什么我们把 OpenMP 换成了自研线程池
人工智能·嵌入式·c·fhe·推理引擎·c11·边缘推理·同态加密推理
haliu7 天前
【FHE】(十):密文里的 attention——没有 max,softmax 怎么办
人工智能·嵌入式·c·fhe·推理引擎·c11·边缘推理·同态加密推理