动态内存管理 柔性数组

文章目录

  • 动态内存函数 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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

Event loop(Message loop)

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

【Linux学习】Linux权限(二)

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

网盘——私聊

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

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

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

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

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

JVM知识点总结二

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

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

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

机器学习 | 使用Scikit-Learn实现分层抽样

在本文中,我们将学习如何使用Scikit-Learn实现分层抽样。 什么是分层抽样? 分层抽样是一种抽样方法,首先将总体的单位按某种特征分为若干次级总体(层),然后再从每一层内进行单纯随机抽样,组成…

Django项目使用uwsgi+nginx部署上线

Django项目使用uwsginginx部署上线 前言settings 配置安装uwsgi 和配置uwsgi推荐配置文件启用wsgi不使用nginx的配置(不推荐)使用nginx的配置 安装 nginx和配置niginx 配置 运行参考资料 前言 代码已经开发完成,正式部署上线 settings 配置…

Redmi Turbo 3新品发布,天星金融(原小米金融)优惠加持护航新机体验

Redmi新十年使命不变,挑战不断升级。Redmi Turbo 3,作为Turbo系列的开篇之作,将自身定位为新生代性能旗舰,决心重塑中端性能新格局。据悉,Redmi Turbo 3于4月10日已正式发布。预售期间更是连续数日,蝉联小米…

SSL证书在HTTP与HTTPS中的角色差异是什么?

在互联网的广泛应用背景下,随着网络攻击和数据泄露事件频发,保障用户的数据安全已成为至关重要的议题。传统的HTTP协议在传输数据时不进行加密处理,导致数据在传输过程中暴露于潜在的窃听和篡改风险中,安全性薄弱。而通过引入SSL/…

解决Keil V5.38 和 ST-Link V3 Debug不能运行问题

目录 概述 1 问题描述 1.1 情况一 1.2 情况二 1.3 情况三 2 解决方法 2.1 认识Keil Mico Lib 2.2 使能Keil Mico Lib 3 验证 3.1 进入C程序Main验证 3.2 断点验证 3.3 上电重启验证 4 结论 笔者使用的验证代码下载地址: stm32-freeRTOS-queue资源-CSD…

微信小程序日期增加时间完成订单失效倒计时(有效果图)

效果图 .wxml <view class"TimeSeond">{{second}}</view>.js Page({data: {tiem_one:,second:,//倒计时deadline:,},onLoad(){this.countdown();},countdown(){let timestamp Date.parse(new Date()) / 1000;//当前时间戳let time this.addtime(2024…

k8s 部署 kube-prometheus监控

一、Prometheus监控部署 1、下载部署文件 # 使用此链接下载后解压即可 wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/heads/release-0.13.zip2、根据k8s集群版本获取不同的kube-prometheus版本部署 https://github.com/prometheus-operator/k…

VSCode断点调试(ROS)

0、安装ros插件 在扩展商店中安装ROS插件&#xff08;Microsoft&#xff09; 1、修改CMakeList.txt # set(CMAKE_BUILD_TYPE "Release") // 注释Release模式 set(CMAKE_BUILD_TYPE "Debug") // 设置为Debug模式 # set(CMAKE_CXX_FLAGS_RELEASE &…

递归、搜索与回溯算法:回溯,决策树

回溯算法是⼀种经典的递归算法&#xff0c;通常⽤于解决组合问题、排列问题和搜索问题等。 回溯算法的基本思想&#xff1a;从⼀个初始状态开始&#xff0c;按照⼀定的规则向前搜索&#xff0c;当搜索到某个状态⽆法前进时&#xff0c;回退到前⼀个状态&#xff0c;再按照其他…

Hadoop3:大数据的基本介绍

一、什么是大数据 1、大数据的4v特点 Volume&#xff08;大量&#xff09; Velocity&#xff08;高速&#xff09; Variety&#xff08;多样&#xff09; Value&#xff08;低价值密度&#xff09; 2、大数据部门间的工作岗位 第三部分&#xff0c;其实就是JavaWeb 二、…