动态内存管理申请调整和释放

news2024/11/29 4:42:07

动态内存管理存放在内存中的堆区中
动态内存分配的函数:malloc、calloc、realloc、free

动态内存分配

  • malloc函数(内存申请空间)无初始化
  • free函数(动态内存释放)
  • calloc函数(内存空间申请)初始化
  • realloc函数(调整空间)

malloc函数(内存申请空间)无初始化

在这里插入图片描述
分配一个大小字节的内存块,返回一个指向该块开头的指针。
新分配的内存块的内容没有初始化,保留不确定的值。
如果size为0,则返回值取决于特定的库实现(它可能是也可能不是空指针),但是返回的指针不能被解引用。
malloc:是用来申请内存空间的

free函数(动态内存释放)

在这里插入图片描述
free:可以释放申请的内存
主动释放动态开辟的内存空间
注意free不能将接收的指针赋值为NULL,需要主动赋值为NULL

代码:

#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>//malloc头文件
int main()
{
    int* p =(int*)malloc(40);//申请40个字节来存放10个整形
    //因为malloc返回为void*,需要强制类型转换为int*
    if(p==NULL)
    {
        printf("%s", strerror(errno));
        return 1;
    }
    //40个字节存放1-10
    for (int i = 0; i < 10;i++)
    {
        *(p + i) = i + 1;
        //p是起始位置地址,为整形,访问数组下标为i的元素,跳过int类型i的字节个数
        //i+1赋值
    }
    //打印
     for (int i = 0; i < 10;i++)
    {
        printf("%d ", *(p + i));
    }
    free(p);
    p = NULL;
}

开辟空间失败

 int* p =(int*)malloc(INT_FAST64_MAX);
    if(p==NULL)
    {
        printf("%s", strerror(errno));
        return 1;
    }

calloc函数(内存空间申请)初始化

在这里插入图片描述
malloc不存放元素打印出随机值,malloc申请到的空间没有初始化,直接返回的起始地址,效率高
而calloc申请好空间后,会把空间初始化为0,返回起始地址

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int* p=(int*)calloc(10,sizeof(int));
    //参数为元素个数和类型占用几个字节
    if(p==NULL)
    {
        perror("calloc");
        return 1;
    }
    //使用
    for (int i = 0; i < 10;i++)
    {
        printf("%d ", *(p + i));
    }
    free(p);
    p = NULL;
    return 0;

realloc函数(调整空间)

在这里插入图片描述
如果第一个参数传入的一个NULL指针的话,功能相当于malloc功能

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    //内存空间开辟
    int* p = (int*)malloc(5 * sizeof(int));
    if(p==NULL)
    {
        perror("malloc");
        return 1;
    }
    //使用
    for (int i = 0; i < 5;i++)
    {
        *(p + i) = 1;
    }
    //调整
     int* ptr = (int*)realloc(p, 10 * sizeof(int));
     //可以调整原申请空间的大小
     //使用一个临时的指针来接收,保证p指针数据不丢失
     if(ptr!=NULL)//判断临时开辟的空间是否失败
     {
         p = ptr;
         ptr=NULL;
     }
     for (int i = 0; i < 10;i++)
    {
        printf("%d ", *(p + i));
    }
    free(p);
    p = NULL;
    return 0;
}

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

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

相关文章

【MADRL】基于MADRL的单调价值函数分解(QMIX)算法

本篇文章是博主强化学习RL领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在强化学习专栏&#xff1…

30道python自动化测试面试题与答案汇总!

Python是不可或缺的语言,它的优美与简洁令人无法自拔,下面这篇文章主要给大家介绍了关于30道python自动化测试面试题与答案汇总的相关资料,需要的朋友可以参考下 1、什么项目适合做自动化测试&#xff1f; 关键字&#xff1a;不变的、重复的、规范的 1&#xff09;任务测试明…

硬核剧透!安全领域专家及领军人物共话生态标准 | 2024 龙蜥大会=

2024 龙蜥操作系统大会由中国计算机学会开源发展委员会、中关村科学城委员会、海淀区委网信办、中国开源软件推进联盟指导&#xff0c;龙蜥社区主办&#xff0c;阿里云、中兴通讯、Intel、浪潮信息、Arm、中科方德等 24 家理事单位共同承办&#xff0c;主题为“进化重构赴未来”…

别再混淆了!一文带你理清前置机、跳板机与堡垒机的区别

本文详细介绍前置机、跳板机和堡垒机在网络安全和IT基础设施中各自扮演着重要角色&#xff0c;它们虽然有一定的相似性&#xff0c;但在功能和用途上存在显著差异。以下是对三者的详细解析&#xff1a; 前置机 概念 前置机是一种中间设备&#xff0c;通常位于客户端和服务器…

神经网络训练多个epoch,写论文的时候可以取最好的效果那一个epoch作为结果吗?

在论文中&#xff0c;通常建议报告在验证集上表现最佳的模型作为结果。你可以在训练过程中记录每个 epoch 的性能&#xff0c;并选择在验证集上性能最好的那个 epoch 的结果。这种方法能够展示你所训练的模型在其最佳状态下的表现。 这样做有几个优点&#xff1a; 客观展示模…

Linux系统编程(13)IPC(共享内存)和网络通信基础

一、共享内存 共享内存是通过映射的方式在内核中申请一段可以使用的物理内存空间来映射到用户空间中&#xff0c;用户对用户空间的操作就是直接操作物理内存区域。通过这种方式&#xff0c;进程可以直接读写这部分内存&#xff0c;从而实现高效的数据交换。相比于其他 IPC 机制…

vue2子组件生命周期被调用两次

目前解决办法是改成了这种写法&#xff0c;改为这种不会出现加载两次子组件生命周期的问题 <el-tabs v-model"activeName" style"margin: 0px"><el-tab-pane name"systemLogCollection"><span slot"label">{{ tabLi…

[数据集][目标检测]起子检测数据集VOC+YOLO格式1215张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1215 标注数量(xml文件个数)&#xff1a;1215 标注数量(txt文件个数)&#xff1a;1215 标注…

20240822 每日AI必读资讯

特斯拉雇佣员工通过穿戴动捕服来帮助训练其人形机器人Optimus&#xff01; - 该职位被称为“数据采集操作员”&#xff0c;时薪最高可达48美元&#xff0c;要求员工每天行走超过七小时&#xff0c;携带高达30磅的重量&#xff0c;并长时间佩戴VR头显。 - 员工还必须身高在5英…

ConfigurationProperties使用

ConfigurationProperties 是 Spring Framework 的一个注解 用于将配置文件&#xff0c;环境变量中的值映射到一个 Java 对象的属性上。 简单使用 user:admin:name: adminpassword: 123456age: 18Data Component ConfigurationProperties(prefix "user.admin") publ…

Vue 满屏纵向轮播图

目录 前言轮播图效果展示具体实现实现思路具体代码前言 今天汇总一个需求,还是之前写的,要求写一个满屏的轮播图,准确的说,是鼠标滑动到轮播图的时候,轮播图固定在屏幕上,随着其中的轮播子项遍历结束后,解除固定的效果。原本我最开始想直接修改Element-UI的组件的,但是…

湖州网站建设快速建站

在当今信息化时代&#xff0c;网站的建设已成为企业和个人展示形象、传播信息的重要途径。湖州作为一个历史悠久、文化底蕴深厚的城市&#xff0c;发展迅速&#xff0c;涌现出许多需要快速建立网站的企业和个人。本文将探讨湖州网站建设的快速建站方案。 首先&#xff0c;快速建…

WRF-LES与PALM微尺度气象大涡模拟

针对微尺度气象的复杂性&#xff0c;大涡模拟&#xff08;LES&#xff09;提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟&#xff0c;这些过程往往与天气模式、地形影响和人为因素如城市布局紧密相关。在这种规模上&#xff0c;传统的气象模…

Camunda BPMN 基础组件

Camunda基础 一、参与者 参与者&#xff08;Participants&#xff09;是参与流程的对象&#xff0c;表示流程中活动的执行者&#xff0c;可以是一个组织、角色、系统或者个人。 图示为基础事件&#xff0c;除此之外还有&#xff1a; 消息开始事件&#xff08;Message Start…

第二百零四节 Java正则表达式教程 - Java正则表达式量词

Java正则表达式教程 - Java正则表达式量词 我们可以指定正则表达式中的字符的次数可以匹配字符序列。 为了使用正则表达式表达一个数字或更多的模式&#xff0c;我们可以使用量词。 下表列出了量词及其含义。 量词含义*零次或更多次一次或多次?一次或根本不{m}正好m次{m,}至…

数字工厂管理系统的使用操作难不难

在当今智能制造的浪潮中&#xff0c;引入数字工厂管理系统无疑为企业带来了前所未有的效率提升与决策优化能力。然而&#xff0c;谈及数字工厂管理系统的操作难易程度&#xff0c;这并非一个可以一概而论的问题&#xff0c;它深深植根于系统的复杂性、用户技能水平、培训深度以…

python之matplotlib (8 极坐标)-圆与心

极坐标 极坐标图像的绘制类似于三维图像的绘制&#xff0c;只需要将projection参数由3d改为polar即可。 import numpy as np import matplotlib.pyplot as plt figplt.figure() axfig.add_subplot(projectionpolar)theta np.linspace(0, 2 * np.pi, 100) r np.sin(the…

企业高性能web服务器之Nginx

文章目录 Apache经典的web服务端Apache prefork 模型Apache work 模型&#xff08;适应市场&#xff09;Apache event 模型 网络I/O网络I/O模型I/O模型网络I/O模型 Nginx架构和安装Nginx源码编译环境准备安装nginx Nginx的平滑升级及版本回滚 Nginx架构和进程Nginx进程结构Ngin…

MapTR的BEV结果可视化到PV图中

MapTRv2这篇工作很有意思的一点是预测可视化的时候&#xff0c;在Argoverse数据集上把BEV的预测结果投影到PV图中&#xff0c;来更直观地评估预测结果的好坏&#xff0c;如下图所示。 这部分的代码在maptrv2分支中的tools/maptrv2/av2_vis_pred.py中 def points_ego2img(pts_e…

爬取央视榜单节目

爬取结果&#xff1a; 热播榜&#xff1a; 动画片&#xff1a; 电视剧&#xff1a; 纪录片&#xff1a; 特别节目&#xff1a; 代码部分&#xff1a; import re import pymongoimport requestsres requests.get(https://tv.cctv.com/top/index.shtml?spmC28340.PdNvWY0LYxC…