动态内存管理 柔性数组

news2024/11/10 19:11:29

文章目录

  • 动态内存函数 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.coloradmin.cn/o/1612832.html

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

相关文章

《Linux运维总结:Kylin V10+ARM架构CPU基于docker-compose一键离线部署redis6.2.8之容器版哨兵集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统&…

停更这大半年-我去考了个研

解释一下2023年我几乎没有更新文章 还有私信也没有回,因为我几乎没有登陆过csdn了 我从2023年3月份开学就开始准备考研了 其实3月28号就出结果了,后面有事情就给忘了,给我的粉丝解释一下(虽然粉丝也不多)。后面应该会…

【GPTs分享】GPTs分享之 AskYourPDF Research Assistant​

一、简介 AskYourPDF Research Assistant 是一款高级人工智能研究助手,专门设计用于帮助用户高效从PDF文件和文章中提取信息。它结合了深度学习技术和自然语言处理能力,以便用户能够快速地查询、总结及处理文档内容,并能够生成与文章内容相关…

JAVA的jBPM工作流框架

一. jBPM是什么? 现实生活中有很多需要走一些流程的过程,比如请假流程,报销流程等,使用工作流框架,即可写一个流程即可,添加流程时不在繁琐的建立新的各种配置。jBPM(Java Business Process M…

力扣:104. 二叉树的最大深度(Java,DFS,BFS)

目录 题目描述:输入:输出:代码实现:1.深度优先搜索(递归)2.广度优先搜索(队列) 题目描述: 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从…

【CVPR2023】《A2J-Transformer:用于从单个RGB图像估计3D交互手部姿态的锚点到关节变换网络

这篇论文的标题是《A2J-Transformer: Anchor-to-Joint Transformer Network for 3D Interacting Hand Pose Estimation from a Single RGB Image》,作者是Changlong Jiang, Yang Xiao, Cunlin Wu, Mingyang Zhang, Jinghong Zheng, Zhiguo Cao, 和 Joey Tianyi Zhou…

MyBatisPlus详解(一)项目搭建、@TableName、@TableId、@TableField注解与常见配置

文章目录 前言1 快速入门1.1 环境准备1.1.1 新建数据库1.1.2 创建项目 1.2 快速开始1.2.1 引入MyBatisPlus依赖1.2.2 定义Mapper1.2.3 配置实体类和表的关系1.2.4 简单测试1.2.4.1 测试插入操作1.2.4.2 测试查询操作1.2.4.3 测试更新操作1.2.4.4 测试删除操作 1.3 常见注解1.3.…

Jenkins服务器IP更换,Jenkins URL地址更换

服务器的网络地址发生变动,修改jenkins服务器IP地址后,jenkins网页能够打开,但是job中的配置钩子没有自动改变,如图所示: 经过查询资料了解,需要修改jenkins本地化配置地址才可以显示正确: 1、…

独立样本t检验——python完整代码(直接运行就行)

#!/usr/bin/env python # -*- coding: utf-8 -*- # Author : 三十二画生JH # Contact : fjhstudent163.com # Software: PyCharm # Time : 2024/4/21 21:49 # Site : 网址 # File : t_test.py # Version : # ---功能描述 """ 对实验数据做独立样本&am…

【GoWeb框架初探————XORM篇】

1. XORM xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 1.1 特性 支持 Struct 和数据库表之间的灵活映射,并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit, Join, Havi…

日期相关的题目

日期相关的题目 1. 计算日期到天数转换2. 日期累加3. 打印日期4. 日期差值 1. 计算日期到天数转换 输出示例: 思路&#xff1a;计算前n-1个月的天数在加上这个月的天数。 #include <iostream> using namespace std;int main() {int year, month, day;cin >> yea…

【JavaEE初阶】网络原理|认识协议|协议分层|TCP/IP模型|封装和分用

一、认识协议 1.概念 简单来说&#xff1a;就是一种通信双方&#xff0c;对于通信规则的约定&#xff08;标准&#xff09;&#xff0c;一定是通信双方都认可的 但是这个协议不一定是认可面非常广的&#xff0c;即使是两个人之间的也可叫做协议 就好⽐⻅⽹友&#xff0c;彼此…

Vuex 的原理

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。每一个 Vuex 应用的核心就是 store&#xff08;仓库&#xff09;。“store” 基本上就是一个容器&#xff0c;它包含着你的应用中大部分的状态 ( state )。 Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的…

ansible执行mysql脚本

目录 概述实践环境要求ansible yml脚本命令离线包 概述 ansible执行mysql脚本 实践 官网文档 环境要求 环境需要安装以下内容: 1.mysql客户端(安装了mysql即会有)2.安装MySQL-python (Python 2.X) 详细插件安装链接 ansible yml脚本 关键代码如下&#xff1a; # 剧本…

Pytorch学习路程 2:神经网络分类与实战

目录 神经网络分类 下载数据集 加载数据集 定义损失函数 创建模型 使用DataSet和DataLoader化简我们的数据封装 使用Pytorch神经网络进行气温预测 使用到的包&#xff1a; 构建网络模型 Reference 神经网络分类 我们以最为经典的MNIST数据集为例子&#xff0c;识别手…

GO环境及入门案例

文章目录 简介一、win GO开发环境安装二、Linux go运行环境二、GO代码入门2.1 导包案例2.2 赋值2.3 变量、函数2.4 三方库使用 简介 go不是面向对象语言&#xff0c; 其指针、结构体等比较像C&#xff0c;知名的go 开源项目有docker k8s prometheus node-exporter等 一、win …

FPGA - ZYNQ Cache一致性问题

什么是Cache&#xff1f; Cache是一种用来提高计算机运行速度的一种技术。它是一种小而快的存储设备&#xff0c;位于CPU与内存之间&#xff0c;用于平衡高速设备与低速设备之间的速度差异。Cache可以存储常用的数据或指令&#xff0c;以便CPU更快地获取&#xff0c;从而减少对…

2023年美国西岸行 - Day 1

本来旅行回来就像记录的&#xff0c;结果一拖就是快1年。当然中间原先记录的博客平台关闭也有部分原因&#xff0c;但不是主要原因。趁着今天复活20年前的CSDN博客&#xff0c;赶紧记录一下。 疫情之后第一次全家长途旅行。这次美国之行&#xff0c;在3-4月份订机票的时候跟临…

今日刷三题(day4):简写单词+dd爱框框+除2!

题目一&#xff1a;简写单词 题目描述&#xff1a; 比如 “College English Test”可以简写成“CET”&#xff0c;“Computer Science”可以简写为“CS”&#xff0c;“I am Bob”简写为“IAB” 输入输出描述&#xff1a; 输入&#xff1a;一个复合单词 输出&#xff1a;输…

一文读懂自动化运维工具ansible及其使用

1. ansible简介 ansible是干什么的 ansible是目前最受运维欢迎的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;SaltStack puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令…