70.【C语言】动态内存管理(重点)(3)

news2024/11/24 2:55:30

承接69.【C语言】动态内存管理(重点)(2)文章

目录

4.calloc函数

cplusplus网的翻译

提炼要点

使用

5.recalloc函数

使用说明

作用

调整内存空间的几种情况

1.原有空间之后有足够大的空间

2.原有空间之后没有足够大的空间

建议 

代码

 用recalloc函数来实现malloc函数

推荐阅读


4.calloc函数

cplusplus网站的介绍,点我跳转

cplusplus网的翻译

函数

calloc


void* calloc (size_t num, size_t size);

为含num个元素的数组分配内存块,每个元素有size个字节长,并且把他们的所有位初始化为0

实际结果是分配了一个num*size字节的初始化内存块,内存块的每个位为0

如果size为0,返回值依靠特定的库来实现,它可能是也可能不是一个空指针(即不确定是什么类型的指针,因为C标准没有定义),但返回的指针不应被解引用

参数


num:需要分配的num个元素

size:每个元素的大小(备注:size个字节)

size_t是无符号整型

返回值


成功时,指向内存块的指针被函数分配

指针的类型总为void*,它可以被转换为所需的数据指针类型以便解引用

如果函数不能为请求的内存块分配,则返回一个空指针

提炼要点

1.函数的功能是为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0

2.与malloc函数(具体见68.【C语言】动态内存管理(重点)(上))的区别只在于calloc函数会在返回地址之前把申请的空间的每个字节初始化为全0

3.使用malloc函数前加#include <stdlib.h>

4.养成良好习惯,判断是否为空指针

使用

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int*p=(int*)calloc(10,sizeof(int));
    if (p == NULL)
    {
        perror("calloc");
        return 1;
    }
    //使用
    int i = 0;
    for (i = 0; i < 10; i++)
        printf("%d ", *(p + i));
    //释放
    free(p);
    p = NULL;
    return 0;
}

int*p=(int*)calloc(10,sizeof(int));如果以int形式开辟空间要用sizeof(int);即开辟10个4字节

int*p=(int*)calloc(10,sizeof(int));改为int*p=(int*)malloc(10*sizeof(int));

因为没有初始化为0,而在内存中的字节数组为cd cd cd cd cd cd cd cd......

5.recalloc函数

void* realloc (void* ptr, size_t size);

使用说明

1.ptr是要调整的内存地址

2.size调整之后新大小

3.返回值为调整之后的内存起始位置

4.这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间

作用

为了合理的使用内存,可以对内存的大小做灵活的调整

调整内存空间的几种情况

1.原有空间之后有足够大的空间

此时直接在原有空间之后增大空间

2.原有空间之后没有足够大的空间

此时recalloc按4步处理

1.在堆空间上找到新满足大小的连续空间

2.将旧空间的数据迁移到新空间

3.旧空间的内容被释放

4.返回新空间的地址

建议 

1.在第4步时,建议不要用原来的指针来接收新空间的地址,如果开辟新空间失败,则会返回空指针,

一旦原来的指针被赋为空指针,则原来的指针数据会被丢失

2.释放内存空间)(free(p);)时建议为p置NULL

代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int*p=(int*)malloc(10);
    if (p == NULL)
    {
        perror("mcalloc");
        return 1;//开辟失败,错误返回
    }
    //使用......
    //扩大为20个字节
    int* r_p=(int*)recalloc(p, 20);//新设一个r_p(全称recalloc_pointer)指针,
    if (r_p != NULL)
    {
        p = r_p;
    }
    else
    {
        perror("recalloc");
        return 1;//错误返回
    }
    //最后释放空间
    free(p);
    p = NULL;
    return 0;
}

 用recalloc函数来实现malloc函数

将recalloc函数的第一个参数设为NULL就等同malloc函数

recalloc(NULL,5);等同于malloc(5);

推荐阅读

68.【C语言】动态内存管理(重点)(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习C语言(22)

整理今天的学习内容 1.常见的动态内存的错误 &#xff08;1&#xff09;对NULL指针进行解引用操作 &#xff08;2&#xff09;对动态开辟空间的越界访问 &#xff08;3&#xff09;对非动态开辟内存使用free释放 &#xff08;4&#xff09;使用free释放一块动态开辟内存的一部…

抖音巨量千川涨粉操作流程,值得学习

抖音巨量千川涨粉操作流程值得学习:rjxbb0616 1、找到抖音合作码&#xff08;在抖音APP里&#xff1a;我-右上角三条杠-设置-账号与安全-我的合作码&#xff09;复制合作码发给合作商。 2、合作商在千川平台上发布一个虚拟的热门作品到抖音&#xff0c;然后在千川账户建立目标账…

mysql连接池

MySQL连接池 什么是数据库连接池&#xff1f; ​ 定义&#xff1a;数据库连接池&#xff08;Connection pooling&#xff09;是程序启动时建立一定数量的数据库连接&#xff0c;并将这些连接组成 一个连接池&#xff0c;由程序动态地对池中的连接进行申请&#xff0c;使用&am…

HTML:相关概念以及标签

目录 什么是网页? 什么是HTML语言? 语法规范 HTML基本结构标签 DOCTYPE,lang以及字符集 HTML常用标签 5>图像标签(重要) 除此之外还有几个调整图片属性的标签 图像标签总结 什么是网页? 我们平时使用电脑和手机都是离不开网站和网页的,那么什么是网页呢?什么又是网…

Yolov8改进轻量级网络Ghostnetv2

1,理论部分 轻量级卷积神经网络 (CNN) 专为移动设备上的应用程序而设计,具有更快的推理速度。卷积运算只能捕获窗口区域中的局部信息,这会阻止性能进一步提高。将自我注意引入卷积可以很好地捕获全局信息,但会在很大程度上阻碍实际速度。在本文中,我们提出了一种硬件友好…

【技术分析】嘉楠科技SoC芯片K230

概述 K230是嘉楠科技Kendryte系列AIoT芯片中的最新一代SoC芯片&#xff0c;该芯片采用全新的多异构单元加速计算架构&#xff0c;集成的玄铁C908具有2个高能效RISCV计算核心&#xff0c;内置新一代KPU&#xff08;Knowledge Process Unit&#xff09;智能计算单元&#xff0c;…

【cpp/c++ summary 工具】 Hunter 报错 CMake hunter error: Unexpected MSVC_VERSION

原因&#xff1a;使用的MSVC编译器版本较高&#xff0c;而Hunter版本较低&#xff0c;可在https://github.com/cpp-pm/hunter/releases配置高版本Hunter # HunterGate( # URL "https://github.com/cpp-pm/hunter/archive/v0.23.297.tar.gz" # SHA1 "33…

【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:

使用git clone 时报错unable to access xxx: SSL certificate problem: 这个报错通常是由于SSL证书问题引起的。通常可以按照以下步骤进行排查&#xff1a; 检查网络连接&#xff1a;确保你的网络连接正常&#xff0c;可以访问互联网。尝试使用其他网站或工具测试网络连接是否正…

netty之Netty集群部署实现跨服务端通信的落地方案

前言 在一些小型用户体量的socket服务内&#xff0c;仅部署单台机器就可以满足业务需求。但当遇到一些中大型用户体量的服务时&#xff0c;就需要考虑讲Netty按照集群方式部署&#xff0c;以更好的满足业务诉求。但Netty部署集群后都会遇到跨服务端怎么通信&#xff0c;也就是有…

【PS】删除自定义形状,添加自定义形状

删除自定义形状 在这里选择删除形状为灰色的时候&#xff0c;是不能直接删除的&#xff0c;需要打开形状窗口后才能删除。 找到形状窗口&#xff0c;打开它 然后就可以删除形状了。 导入形状 右键&#xff0c;导入形状 选择你要导入的形状包&#xff08;我这个是某宝买…

Stable Diffusion绘画 | 来训练属于自己的模型:秋叶训练器使用

花了不少时间搜索尝试&#xff0c;都没有找到解决上一篇文章遗留问题的解决方案&#xff0c;导致无法使用 cybertronfurnace 这个工具来完成炼丹&#xff0c;看不到炼丹效果。 但考虑到&#xff0c;以后还是要训练自己的模型&#xff0c; 于是决定放弃 cybertronfurnace&…

数据结构与算法——Java实现 28.二叉树的锯齿形层序遍历

努力成为你想要成为的那种人&#xff0c;去奔赴你想要的生活 —— 24.10.4 103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff…

【Unity】双摄像机叠加渲染

一、前言 之前我在做我的一个Unity项目的时候&#xff0c;需要绘制场景网格的功能&#xff0c;于是就用到了UnityEngine.GL这个图形库来绘制&#xff0c;然后我发现绘制的网格线是渲染在UI之后的&#xff0c;也就是说绘制出来的图形会遮盖在UI上面&#xff0c;也就导致一旦这些…

第十八章(数据在内存中的储存)

1. 整数在内存中的存储 2. ⼤⼩端字节序和字节序判断 3. 浮点数在内存中的存储 我本将心向明月&#xff0c;奈何明月照沟渠正文开始 一、.整数在内存中的储存 整数的2进制的表示方法有三种 1.原码 2.反码 3.补码 这里在第十章我们有详细讲解&#xff0c;有需要的同学可以自…

网络编程项目框架内容

基于TCP的云端书阅管理系统 通过网络实现图书借阅网站&#xff0c;包括服务器与客户端&#xff0c;客户端与服务器是基于TCP连接。 客户端描述&#xff1a;客户端运行会与服务器端进行连接&#xff0c;连接成功后&#xff0c;显示注册登录界面。此时&#xff0c;客户端可以选…

算法: FriendShip - Kruskal+并查集判环

题目 A-Friendship_2024.5.7 (nowcoder.com) 思路分析 求所有符合题意情况的最大值中的最小值&#xff1b;符合题意是指保证图的连通性。那么贪心思路&#xff0c;将所有已存在的关系和可能存在的关系存储起来&#xff0c;利用Kruskal贪心算法每次取权值最小的且不构成回路的…

从零开始讲PCIe(2)——PCI总线传输模型与机制

一、前言 在之前的内容中&#xff0c;我们已经对PCI有了一些基本的认识&#xff0c;我们了解了PCI的一般架构&#xff0c;标准传输周期等相关的内容&#xff0c;接下来我们会进一步了解PCI具体的传输模型和传输机制。 二、PCI传输模型 PCI一共有三种数据传输模型&#xff0c;分…

Windows安装ollama和AnythingLLM

1、Ollama安装部署 1&#xff09;安装ollama 官网下载&#xff1a;https://ollama.com/download&#xff0c;很慢 阿里云盘下载&#xff1a;https://www.alipan.com/s/jiwVVjc7eYb 提取码: ft90 百度云盘下载&#xff1a;https://pan.baidu.com/s/1o1OcY0FkycxMpZ7Ho8_5oA?…

Python-初识Python

前言&#xff1a;在这篇博客当中&#xff0c;我们将步入Python知识的殿堂&#xff0c;Python以其简单、易学、开发效率高在近些年的发展可谓是迅猛&#xff0c;在许多领域都可以见到它的场景&#xff0c;例如&#xff1a;人工智能/机器学习、大数据开发、后端开发等都会用到。 …

仕考网:公务员国考有三不限岗位吗?

国家公务员考试中的“三不限”岗位&#xff0c;即不限制专业背景、政治面貌、基层工作经验的职位。在国考中&#xff0c;是有的但是数量比较少。 这些岗位主要集中在省级及以下单位&#xff0c;以民航空警和铁路公安为主。其中&#xff0c;有一半的职位是面向四项目人员&#…