动态内存管理之柔性数组

news2024/11/23 7:24:29

柔性数组:
只存在于结构体中,而且还要是结构体的最后一个成员,并且在他的前面必须要有其他成员,
大小是未知的,所以在用sizeof计算出的结构体大小是出柔性数组外的,
在这里插入图片描述
柔性数组的大小是可以变化的,那么如何调整柔性数组的大小呢,
想到调整大小我们就可以想到动态内存分配
所以我们可以首先用malloc函数为柔性数组开辟一个动态内存,
再用realloc函数调整空间大小
在这里插入图片描述
想要实现这样的把结构体大小做调整的操作,除了在结构体中包含柔性数组外,我们还可以在结构体中包含指针


struct S {
	int a;
	int* arr;
};
int main()
{
	struct S* p=(struct S*)malloc(sizeof(struct S));//先定义一个结构体指针,并给开辟空间
	if (p == NULL)
	{
		perror("malloc->p");
		return 1;
	}
	p->arr = (int*)malloc(40);//然后再通过结构体指针找到arr指针,对arr指针指向的区域开辟空间
	if (p->arr == NULL)
	{
		perror("malloc->arr");
		return 1;
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		p->arr[i] = i + 1;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", p->arr[i]);
	}
	//调整
	int* pc=(int*)realloc(p->arr, 60);
	if (pc == NULL)
	{
		perror("realloc");
		return 1;
	}
	p->arr= pc;
	for (i = 0; i < 15; i++)
	{
		printf("%d\n", p->arr[i]);
	}
	//释放
	free(p->arr);
	p->arr = NULL;
	free(p);
	p=NULL;
	return 0;
}

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

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

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

相关文章

Staples Drop Ship EDI 需求分析

Staples 是一家美国零售公司&#xff0c;总部位于马萨诸塞州弗拉明汉&#xff0c;主要提供支持工作和学习的产品和服务。该公司于 1986 年在马萨诸塞州布莱顿开设了第一家门店。到 1996 年&#xff0c;该公司已跻身《财富》世界 500 强&#xff0c;后来又收购了办公用品公司 Qu…

小学期笔记——天天酷跑7

玩家吃金币的动作是加分的事件源 吃到炸弹更改游戏角色的生命状态 if (person.x person.width > bomb2.x&& person.x < bomb2.width bomb2.x&& person.y person.height > bomb2.y&& person.y < bomb2.y bomb2.height) 效果&#xff1…

OpenShift 4 - 可观测性之用 OpenTelemetry+Jaeger 实现 Distributed Tracing

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.13 的环境中验证 文章目录 技术架构部署 Distributed Tracing 运行环境安装测试应用并进行观测跟踪参考 说明&#xff1a; 本文使用的测试应用采用的是 “手动 Instrumentation” 方式在…

【雕爷学编程】Arduino动手做(85)---LCD1602液晶屏模块6

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

02 linux 基础(2)

shell 基本维护命令 获取联机帮助 使用 man 命令可以找到特定的联机帮助页&#xff0c;并提供简短的命令说明。一般语法格式为&#xff1a; 联机帮助页提供了指定命令 commandname 的相关信息&#xff0c;包括&#xff1a;名称、函数、语法以及可选参数描述等。无论帮助有多长…

PyAutoGUI

概述 PyAutoGUI是一个纯Python开发的跨平台GUI自动化工具&#xff0c;它是通过程序来控制计算机的键盘和鼠标的操作&#xff0c;从而实现自动化功能。所谓的GUI是指图形用户界面&#xff0c;即通过图形方式来显示计算机的界面&#xff0c;早期的计算机是以命令行界面来操作&am…

Vector3.Cross

上期介绍了Vector.Dot可以用来判断敌人处于自身的前方or后方&#xff0c;那么这期就是通过叉乘来判断敌人处于自身的左方or右方 public class CrossTest : MonoBehaviour {public GameObject sphere;public GameObject cube;// Start is called before the first frame updatev…

性能测试工具 Locust + Boomer In Docker

目录 前言&#xff1a; 背景 启动 Locust-master Boomer 调试模式启动 boomer locust worker 模式启动 get 请求 post 请求 指定请求头 直接使用 curl 命令 动态读取 csv --json-value-type 说明 前言&#xff1a; Locust 是一种开源的性能测试工具&#xff0c;可…

【js小游戏案例】纯前端实现飞机大战,附带源码

技能&#xff1a; 使用html js css实现飞机大战小游戏 需求&#xff1a; 我军飞机左右移动&#xff0c;并且按空格 可以发射炮弹&#xff0c;敌方飞机从上往下飞&#xff0c;接触到我方炮弹 飞机被歼灭&#xff0c;我军接触到敌军飞机也将会被歼灭&#xff0c;我方飞机吃到道…

【C++】vector类的模拟实现(增删查改,拷贝构造,赋值运算,深浅拷贝)

文章目录 前言一、 整体1.命名空间:2构造函数&#xff1a;1普通构造2迭代器构造3初始化字符构造4拷贝构造&#xff1a; 3析构函数 二、成员函数实现1.大小1当前大小(size())2总体容量(capacity()) 2.返回头尾迭代器1begin&#xff08;&#xff09;2end&#xff08;&#xff09;…

改进的北方苍鹰算法优化BP神经网络---回归+分类两种案例

今天采用前作者自行改进的一个算法---融合正余弦和折射反向学习的北方苍鹰(SCNGO)优化算法优化BP神经网络。 文章一次性讲解两种案例&#xff0c;回归与分类。回归案例中&#xff0c;作者选用了一个经典的股票数据。分类案例中&#xff0c;选用的是公用的UCI数据集。 BP神经网络…

达芬奇密码

《达芬奇密码》是一款由德国人发明的桌游&#xff0c;游戏由2-4个人组成。每个玩家执有一定的数字牌&#xff0c;玩家需隐藏你的数字密码&#xff0c;猜透对手的密码&#xff0c;推测可能的答案&#xff0c;打败对手。 24 块塑料立牌&#xff0c;12 个黑色和12个白色。每块上数…

7-25作业

思维导图 QT窗口代码 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {qDebug()<< this->size();this->resize(1000,800);//设置宽高this->setFixedSize(1000,800);//固定宽高//窗口标题this->setWindowTitle("跟党走…

全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数据信…

LED芯片 VAS1260IB05E 带内部开关LED驱动器 汽车硬灯带灯条解决方案

VAS1260IB05E深力科LED芯片是一种连续模式电感降压转换器&#xff0c;设计用于从高于LED电压的电压源高效驱动单个或多个串联连接的LED。该设备在5V至60V之间的输入电源下工作&#xff0c;并提供高达1.2A的外部可调输出电流。包括输出开关和高侧输出电流感测电路&#xff0c;该…

【Linux】进程通信 — 管道

文章目录 &#x1f4d6; 前言1. 通信背景1.1 进程通信的目的&#xff1a;1.2 管道的引入&#xff1a; 2. 匿名管道2.1 匿名管道的原理&#xff1a;2.2 匿名管道的创建&#xff1a;2.3 父子进程通信&#xff1a;2.3.1 read()阻塞等待 2.4 父进程给子进程派发任务&#xff1a;2.5…

使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)

写在前面 工作中遇到&#xff0c;简单整理人脸识别中&#xff0c;对于模糊程度较高的图像数据&#xff0c;识别率低&#xff0c;错误率高。虽然使用 AdaFace 模型&#xff0c;对低质量人脸表现尤为突出。但是还是需要对 模糊程度高的图像进行丢弃处理当前通过阈值分类&#xff…

8.python设计模式【组合模式】

内容&#xff1a;将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。角色&#xff1a; 抽象组建&#xff08;component&#xff09;叶子组建(Leaf)复合组建(Composite)客户端 (Client) UML 图 举个例子 需求&#xf…

Mysql-MHA高可用

MHA高可用配置及故障切换 一.MySQL MHA 1.什么是MHA &#xff08;&#xff11;&#xff09;MHA (Master High Availability) 是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 &#xff08;&#xff12;&#xff09;MHA的出现就是解决MySQL 单点的问题。 &#xff…

elementui el-table折叠表格,点击主表数据展开从表明细

用element-ui 的el-table实现&#xff1a;主表table可实现展开行显示关联的明细表table的列表数据&#xff0c;效果图如下 <el-tableref"tableData"v-loading"listLoading":data"tableData"row-key"id"borderstripehighlight-curr…