C语言——malloc与free

2023-11-06

1. malloc

  • 在堆区申请一个指定大小、连续的空间并返回空间地址

(int*)malloc(4);
// 申请了一个四个字节的空间并且规定该空间为一个int型变量空间,而不是别的。

int *p =(int*)malloc(4);
// 由于malloc返回一个 空间地址,所以需要一个相应类型的指针来接收改地址

int *p;
p=(int*)malloc(4);
//也可以分写

1.1 size_t

1.2 malloc可申请的字节数

2G=210241024*1024个字节

1.2.1 整形常量溢出

例如int类型是-231~231个字节


int *p=(int*)malloc(2*1024*1024*1024);
//超出int型的容积,会出现常量溢出的警告 

int *p=(int*)malloc(2*1024*1024*1024-1);
当把申请空间减去一部分是,由于先算乘法,再算加法,第一次乘法溢出,第二次用一个溢出的数再去运算还是溢出,会报两次溢出警告

两种解决方法


int *p=(int*)malloc(2u*1024u*1024u*1024u);
加上u变成无符号的整形,范围是0~2^32个字节

还可以申请多次
int *p1=(int*)malloc(1024*1024*1024);
int *p2 =(int*)malloc(1024*1024*1024);

  • 当你申请了一个3个字节的空间,并把这个空间给了一个int型,因为int型为4字节,少了一个字节,

int *p = (int*)malloc(3);
free(p);
//当释放p空间的时候会出现错误,控制台光标卡在释放空间的位置

  • 当p被赋值给一个地址,就不要给他在赋值另一个地址了。原地址会被后赋值的地址覆盖掉,但是原地址不会被释放,但是也找不到他,就造成了内存的丢失。

int *p = (int*)malloc(4);
p = (int*)malloc(4);  // 原地址会被覆盖掉,造成内存丢失

whil(1)
{
    malloc(4);
    // 当他不断地运行下去,你电脑的内存就会不断地变小
}

  • malloc申请的空间在关闭程序的时候会自动关闭,但是运行的服务器几乎不会关机,所以需要free来释放空间。但是在自己编程的过程中,不用的空间一定要马上释放。

1.3 malloc一维数组


堆区申请内存
int *p=malloc(sixeof(int)*5);  //申请了5个int类型的空间

栈区申请内存
int a[5];
int *p=&a[0];

  • 一维数组指针空间申请

int (*p)[5]=(int (*)[5])malloc(4*5);
//(*)[5]必须要这么写,这样是数组指针,如果写成*[5],只是指针数组
int a[5];
int (*p)[5]=&a;

free(p);

1.4 calloc

与malloc的功能相似,申请一段空间数组,但是calloc在申请空间的同时就自动的给申请的空间赋值为0。


int *p=(int*)calloc(5,4)// 5代表要申请的空间个数,4代表每个空间的大小。

free(p);

relloc
修改申请空间的大小


int *p=(int*)malloc(12);  //为p申请了一个12个字节的地址 
int *p1=(int*)realloc(p,20); //


free(p)

2. free

释放某个地址空间的,被释放的地址的值不是0,而是某个初始值。


int *p = (int*)malloc(4);
*p=12;

free(p);

  • 内存地址是不能重复释放的,会出现崩溃

  • 不能释放栈区空间,会出现崩溃

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言——malloc与free 的相关文章

随机推荐

  • (个人)AR电子书系统创新实训第四周(2)

    使用Json保存数据索引 在成功地配置好服务器并进行了访问测试后 打包上传数据的功能只剩下最后一步需要测试了 那就是对数据关系的组织及保存 对于AR识别来说 数据的内容主要有两类 一类是用于进行位置判断的目标图像 在这个项目中就是宣传册上的
  • 毕业设计-基于深度学习的垃圾分类识别方法

    目录 前言 课题背景和意义 实现技术思路 一 目标检测算法对比研究 二 垃圾数据集的制作 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个
  • 基于java springboot vue实现的校园招聘系统

    基于java springboot vue实现的校园招聘系统 总体分为三端 分别为 管理员 用户 企业 用户端 管理员端 企业端
  • layui table切换html,layui-table对返回的数据进行转变显示的实例

    在使用layui表格时 在ajax请求回来的数据 有时候需要我们处理之后显示 1 比如性别sex这个字段 后台可能返回的是1 或者 2 那我们总不能显示1 和 2 我们需要显示男和女 这里就用到了自定义模板了 if d sex 1 男 el
  • RS485转0_20mA输出模块设计

    文章目录 1 简介 2 功能实现 3 测试 4 开源地址 1 简介 结合以前发的文章 我们知道 模拟量输出有两种 一种是共地型 一种是共源型 今天开源一款rs485隔离的转0 20ma输出模块的设计 我设计模块的原因是为了测试公司的一款模拟
  • 基础算法题——异或(复杂度的小差异)

    异或 题目描述 给定一个长度为 n 初始全为 0 的数列 ai 下标从 1 开始 定义操作模 k 异或 v 为对所有满足 ki 0 mod k 的下标 i 将异或上整数v 即令 ai ai v 给出q次操作 每次操作之后输出序列的异或和 并
  • js插入前后

  • 【2023.07.15】生成模型(三)Score-based Generative Models

    1 main contribution 来自Score based Generative Model的原文 1 提供了一个统一SMLD denoising score matching with langevin dynamics 和DDP
  • MPLS LDP的原理与配置

    一 LDP协议的概述 1 LDP会话 本地会话 LSR之间是直连的 双方使用组播地址224 0 0 2建立会话 远程会话 LSR之间可以是非直连的 双方建立会话是使用单播建立的 缺省是本地会话 2 LDP领接体 只要双方建立了会话之后就建立
  • Flink+Hudi 构架湖仓一体化解决方案

    摘要 本文详细介绍了 Flink Hudi 湖仓一体化方案的原型构建 主要内容为 Hudi 新架构与湖仓一体 最佳实践 Flink on Hudi Flink CDC 2 0 on Hudi Tips FFA 2021 重磅开启 点击 阅读
  • tcp第三次握手ack均是1?

    本人做了tcp连接测试 但是结果和网络中其他人的说法有点不一致 测试使用了命令 tcpdump s1用网卡ens33抓取端口好为80的网络数据包 tcpdump nn i ens33 port 80 s2访问百度 建立3次连接请求数据 cu
  • P1094 [NOIP2007 普及组] 纪念品分组 Python (贪心算法)

    题目地址 P1094 NOIP2007 普及组 纪念品分组 又是一道水题 但CSDN上没有详细Python代码 于是我就来水一贴 对于想要学算法提升能力的同学来说可以刷这套题单 能力全面提升综合题单 读完题目后我们可以快速得出 既然要求最小
  • 青少年CTFmisc-simpleness

    提示弱口令 爆破出hint的密码123456 hint zip里面解出两个文件 hint png hint rar 这个hint rar是伪加密 随便打开一个十六进制的编辑器 这里的24表示已加密 改成20表示未加密 打开hint txt
  • 8B10B编解码的Verilog实现

    此篇是我在学习中做的归纳与总结 其中如果存在版权或知识错误或问题请直接联系我 欢迎留言 PS 本着知识共享的原则 此篇博客可以转载 但请标明出处 目录 0 8B 10B编码 0 0 8B 10B编码原理 0 1 8B 10B编码的FPGA实
  • pycharm调整字母长度分割线为80

    写过 python 的同学都知道 python 代码默认一行的长度不超过 80 个字符 但是 pycharm 默认的分割线在第 120 个字符处 需要作如下修改 设置 File gt Settings gt Code Style gt Ri
  • JetBrains全家桶使用说明

    一 二 三 友情推荐 激活获取地址
  • 泰勒公式和二项式展开定理的共同点

    泰勒公式和二项式展开定理的共同点 对于f x 1 x n 采用泰勒展开法有 f x fk0 0 x 0 0 fk1 0 x 1 1 fk2 0 x 2 2 其中fk0 0 fk1 0 分别代表fk x 的k阶导数 并且传0代替k阶导数中的x
  • 保姆级教程:Linux和Windows下本地化部署Vicuna模型

    目录 文章摘要 一 Vicuna简介 1 Vicuna模型定义 2 Vicuna模型的应用场景 3 Vicuna模型的训练数据 4 Vicuna模型的版本 5 性能评估 二 linux 操作系统下部署 1 环境介绍 2 安装Python3
  • Windows 动态磁盘卷:简单卷、跨区卷 、带区卷 、镜像卷 、RAID5卷 相关配置操作

    Windows Server 2003 提供了新的磁盘管理方式 能够提高磁盘性能和容错能力 将基本磁盘升级为动态磁盘 能够更灵活分配和管理磁盘空间 能够配置各种磁盘阵列提高磁盘能力 动态磁盘与基本磁盘对比 一块基本磁盘只能包含4个分区 它们
  • C语言——malloc与free

    文章目录 1 malloc 1 1 size t 1 2 malloc可申请的字节数 1 2 1 整形常量溢出 1 3 malloc一维数组 1 4 calloc 2 free 1 malloc 在堆区申请一个指定大小 连续的空间并返回空间