动态内存管理 柔性数组

文章目录

  • 动态内存函数 malloc free
  • calloc
  • realloc 重新开辟空间
    • realloc 也可以第一个参数为NULL,则是直接开辟内存,类似于malloc用法
  • 常见的动态内存错误
    • 对空指针进行解引用操作
    • 对开辟的内存越界访问
    • 对非动态开辟的内存使用free释放
    • 使用free释放动态开辟内存的一部分
    • 对同一块动态内存多次释放
    • 如何避免对同一块内存释放两次
    • 动态开辟的内存忘记释放,内存泄漏
  • 几个 经典笔试题
    • 题目1
    • 题目2
    • 题目3
    • 题目4
  • C++/C程序内存开辟
  • 柔性数组
    • 包含柔性数组成员 的结构体大小计算
    • 柔性数组的使用
  • 动态通讯录

在这里插入图片描述
最好先看
https://blog.csdn.net/qq_37891604/article/details/132820013

动态内存函数 malloc free

在这里插入图片描述
在这里插入图片描述

malloc
在这里插入图片描述
size要开辟的字节数,申请好空间后是把这段空间的起始地址给你,返回第一个字节的地址
在这里插入图片描述
动态内存申请可能失败(总共20的空间,你要申请300)
在这里插入图片描述
用完要释放
在这里插入图片描述

calloc

在这里插入图片描述
在这里插入图片描述

realloc 重新开辟空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

realloc 也可以第一个参数为NULL,则是直接开辟内存,类似于malloc用法

在这里插入图片描述

常见的动态内存错误

对空指针进行解引用操作

在这里插入图片描述
在这里插入图片描述

对开辟的内存越界访问

在这里插入图片描述
在这里插入图片描述

对非动态开辟的内存使用free释放

在这里插入图片描述
在这里插入图片描述

使用free释放动态开辟内存的一部分

在这里插入图片描述
p不在指向动态开辟出来的内存的起始位置会出问题,p不走到最后,走到一半也不行
在这里插入图片描述
在这里插入图片描述
中间也不行
在这里插入图片描述

对同一块动态内存多次释放

在这里插入图片描述
在这里插入图片描述

如何避免对同一块内存释放两次


在这里插入图片描述

动态开辟的内存忘记释放,内存泄漏

在这里插入图片描述

几个 经典笔试题

题目1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改正确1
在这里插入图片描述
修改正确2
在这里插入图片描述

题目2

在这里插入图片描述
在这里插入图片描述
错误,不要返回栈区的地址
在这里插入图片描述
加static没事在全局区了
在这里插入图片描述
在这里插入图片描述

题目3

在这里插入图片描述
在这里插入图片描述
改正
在这里插入图片描述

题目4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改正
在这里插入图片描述

C++/C程序内存开辟

内核空间:留给内核使用的一段空间,内核态,4G的内存留2G给操作系统用
在这里插入图片描述

在这里插入图片描述

柔性数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

cpu的访问速度是超级快的,而内存的读写速度又比较慢,那怎么办呢?我们有一种方式就是把内存的数据放到高速缓存里,高速缓存放到寄存器里 ,当cpu每次处理数据的时候去寄存器里拿,效率就会快,寄存器找不到就去cache里找,cache里找不到就去内存里找,
在这里插入图片描述
这两种写法是一个意思,大小是位置的称为柔性数组成员,即数组的大小是可以调整的
在这里插入图片描述

包含柔性数组成员 的结构体大小计算

结构体的大小是不包含柔性数组的
在这里插入图片描述

柔性数组的使用

在这里插入图片描述
在这里插入图片描述
重新分配内存
在这里插入图片描述
在这里插入图片描述
第二种写法
在这里插入图片描述
也可以不malloc,直接创建个结构体变量,那就是在栈上了
在这里插入图片描述

动态通讯录


在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
改进
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ps不是malloc出来的不用释放
在这里插入图片描述

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

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

相关文章

vue2 在循环里,给字体加上随机颜色并加上随机图标且少重复

在循环里&#xff0c;给字体加上随机颜色并加上随机图标且少重复 <template><div class"pbfb5"><el-row :gutter"32"><el-col :xs"6" :sm"6" :lg"6" style"margin-bottom:32px;" v-for&quo…

(四)相关性分析 学习简要笔记 #统计学 #CDA学习打卡

目录 一. 相关性分析简介 二. 相关性分析方法 1&#xff09;连续型变量vs连续型变量&#xff1a;Pearson/Spearman &#xff08;a&#xff09;Pearson &#xff08;b&#xff09;Spearman等级相关系数 2&#xff09;二分类变量&#xff08;自然&#xff09;vs连续型变量&…

macos知名的清理软件 cleanmymac和腾讯柠檬哪个好 cleanmymacx有必要买吗

MacOS是一款优秀的操作系统&#xff0c;但是随着使用时间的增加&#xff0c;它也会产生一些不必要的垃圾文件&#xff0c;占用磁盘空间和内存资源&#xff0c;影响系统的性能和稳定性。为了保持MacOS的清洁和高效&#xff0c;我们需要使用一些专业的清理软件来定期扫描和清除这…

CentOS服务器安装宝塔(图文详解)

宝塔的操作其实就是类似于把linux的指令使用方式&#xff0c;通过宝塔这个第三方工具进行可视化展示&#xff0c;但其实&#xff0c;他还是在操作linux&#xff0c;只是不需要你去记那么多的指令&#xff0c;宝塔把大多数的工具都集成到自己里面&#xff0c;这样你就可以在宝塔…

信号量Semaphore

什么是信号量&#xff1f; C中的信号量&#xff08;Semaphore&#xff09;是一种同步对象&#xff0c;用于控制对共享资源的访问&#xff0c;以防止多个线程或进程同时访问同一资源&#xff0c;从而避免数据不一致的问题。信号量通过维护一个计数值来实现这一功能&#xff0c;…

【Golang】Gin教学-获取请求信息并返回

安装Gin初始化Gin处理所有HTTP请求获取请求的URL和Method获取请求参数根据Content-Type判断请求数据类型处理JSON数据处理表单数据处理文件返回JSON响应启动服务完整代码测试 Gin是一个用Go&#xff08;又称Golang&#xff09;编写的HTTP Web框架&#xff0c;它具有高性能和简洁…

Event loop(Message loop)

事件循环&#xff08;消息循环&#xff09; 浏览器的进程模型 进程 程序运行需要有它自己专属的内存空间&#xff0c;可以把这块内存空间简单的理解为进程 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 线程 …

Java并发体系--atomic--字段类

atomic--字段类 Atomic字段类是一种原子操作类&#xff0c;用于实现多线程环境下对共享变量的原子操作。它可以确保在并发情况下&#xff0c;对共享变量的操作是原子性的&#xff0c;不会出现线程安全问题。 Atomic字段类提供了一些方法&#xff0c;比如get()和set()方法用…

【Linux学习】Linux权限(二)

文章目录 &#x1f680;Linux权限管理&#x1f680;修改文件的所有者&#x1f680;修改文件或目录的所属组&#x1f680;同时修改为念的拥有者与所属组&#x1f680;文件类型&#x1f680;file指令&#x1f680;目录权限&#x1f680;umask指令&#x1f680;粘滞位 &#x1f68…

Ubuntu22.04.4 - Redis - 笔记

一、安装 sudo apt update sudo apt install redis-serverrootzheng:/etc# redis-cli --version redis-cli 6.0.16二、配置文件修改 配置文件地址 /etc/redis/redis.conf 1、开启远程访问 # 注释掉绑定地址#bind 127.0.0.1&#xff0c;让Redis可远程访问 # bind 127.0.0.1 …

论系统的安全架构的三个论点写一篇论文

撰写一篇围绕系统的安全架构三个论点的论文能够提供深刻的见解关于如何构建一个既安全又可靠的系统。接下来&#xff0c;我们将详细探讨这三个论点&#xff0c;并提供一个论文大纲来指导你如何组织和展开你的论述。 论文大纲 1. 引言 简要介绍系统安全架构的重要性&#xff…

Linux 内核的汇编级别的系统调用

2024年4月19日&#xff0c;周五下午 Linux 内核支持多种汇编级别的系统调用&#xff0c;这些系统调用通常以软中断&#xff08;soft interrupt&#xff09;的方式实现。 这里列举了一些常见的汇编级别的系统调用&#xff1a; x86 架构下的 int 0x80 调用&#xff1a;在 x86 架…

网盘——私聊

在私聊这个功能实现中&#xff0c;具体步骤如下&#xff1a; 1、实现步骤&#xff1a; A、客户端A发送私聊信息请求&#xff08;发送的信息包括双方的用户名&#xff0c;聊天信息&#xff09; B、如果双方在线则直接转发给B&#xff0c;不在线则回复私聊失败&#xff0c;对方…

TLV262x系列单电源运算放大器

这份文件是德州仪器&#xff08;Texas Instruments&#xff09;关于TLV262x系列单电源运算放大器的数据手册。以下是该文件的核心内容概要&#xff1a; 产品系列描述&#xff1a; TLV262x系列是德州仪器&#xff08;Texas Instruments&#xff09;推出的一系列低功耗、宽带宽的…

Sping源码(七)—ConfigurationClassPostProcessor创建流程

序言 前两篇文章介绍了invokeBeanFactoryPostProcessors的执行流程&#xff0c;和自定义实现BeanDefinitionRegistryPostProcessor类的方式方法。 这篇文章会主要介绍Spring启动加载xml时&#xff0c;ConfigurationClassPostProcessor类是如何加载到Spring中&#xff0c;并且…

VScode 里面使用 python 去直接调用 CUDA

上一个 帖子主要分享了如何 去将 C 程序 打包成一个package。 我们最后的 目的实际上是想把 CUDA 的程序 打包成 一个 Package &#xff0c; C 程序只是起到了桥梁的作用&#xff1a; 首先&#xff1a;CUDA 程序 和 C 的程序一样&#xff0c; 都有一个 .cu 的源文件和 一个 .…

【数学建模】最优旅游城市的选择问题:层次分析模型(含MATLAB代码)

层次分析法&#xff08;The analytic hierarachy process&#xff0c;简称AHP&#xff09;是一种常用的决策分析方法&#xff0c;其基本思路是将复杂问题分解为多个组成部分&#xff0c;然后对这些部分进行逐一评估和比较&#xff0c;最后得出最优解决方案。&#xff08;例如&a…

JVM知识点总结二

参考文章&#xff1a;【Java面试题汇总】JVM篇&#xff08;2023版&#xff09;_jvm面试题2023-CSDN博客 1、说说你了解的JVM内存模型&#xff1a; JVM由三部分组成&#xff1a;类加载子系统、运行时数据区、执行引擎 JVM内存模型&#xff1a; 内存模型里的运行时数据区&#…

mongodb 实现两个集合的关联并分页查询

问题描述 实现两个集合的关联并分页查询。 假设&#xff1a; collection1中有deviceId等字段&#xff0c;collection2 中有deviceId、unitName等字段&#xff0c; 关联这两个colltion&#xff0c;并分页查询 代码实现 public ResponseEntity<String> getPageList(Reque…

ruby 配置代理 ip(核心逻辑)

在 Ruby 中配置代理 IP&#xff0c;可以通过设置 Net::HTTP 类的 Proxy 属性来实现。以下是一个示例&#xff1a; require net/http// 获取代理Ip&#xff1a;https://www.kuaidaili.com/?refrg3jlsko0ymg proxy_address 代理IP:端口 uri URI(http://www.example.com)Net:…