当前位置: 首页 > news >正文

形参动态内存开辟和柔性数组

//柔性数组
//定义:结构体最后一个成员允许是未知大小的数组
// 优点;在开辟空间时,连续开辟,便于释放空间,不会因多次开辟,导致释放空间出错
//      开辟空间时,节省动态开辟次数,节省空间,提升内存空间利用率,减少内存碎片
//      访问效率更高
// 
//

struct S
{
    int n;
    int* arr;//指针大小随系统 4/8 个字节

};
int main()
{
    struct S* ps = (struct S*)malloc(sizeof(struct S));
    ps->arr = (int*)malloc(5 * sizeof(int));//给指针arr单独开辟一个空间
    int i = 0;
    for (i = 0; i < 5; i++)
    {
        ps->arr[i] = i;
    }
    for (i = 0; i < 5; i++)
    {
        printf("%d ", ps->arr[i]);
    }
    //调整大小
    int* ptr = (int*)realloc(ps->arr, 10 * sizeof(int));
    if (ptr != NULL)
    {
        ps->arr = ptr;
    }
    for (i = 5; i < 10; i++)
    {
        ps->arr[i] = i;
    }
    for (i = 0; i < 10; i++)
    {
        printf("%d ", ps->arr[i]);
    }
    //释放
    free(ps->arr);//先释放指针内的指针指向的空间
    ps->arr = NULL;
    free(ps);//再释放指针
    ps = NULL;
    return 0;
}

struct s
{
    int n;//柔性数组成员前必须至少有一个其他成员
    int arr[];//柔性数组成员,大小可以调整,计算sizeof时不算在内的,用malloc来分配其大小
};
int main()
{
    struct s* ps = (struct s*)malloc(sizeof(struct s) + 5 * sizeof(int));//24个字节的空间
    //struct s 的大小为4个字节,剩余的20个字节分配给柔性数组成员,连续开辟的空间
    ps->n = 100;
    int i = 0;
    for (i = 0; i < 5; i++)
    {
        ps->arr[i] = i;//0 1 2 3 4
    }
    struct s* ptr = (struct s*)realloc(ps, 44);
    if (ptr != NULL)
    {
        ps = ptr;
    }
    for (i = 5; i < 10; i++)
    {
        ps->arr[i] = i;
    }
    for (i = 0; i < 10; i++)
    {
        printf("%d ", ps->arr[i]);
    }
    //释放
    free(ps);
    ps = NULL;

    return 0;
}
void getmemory(char* p)
void getmemory(char** p)
{
    *p = (char*)malloc(100);
    //p = (char*)malloc(100);//没有free 形参p开辟的动态空间,且无法找到,导致内存泄漏
}
void test(void)
{
    char* str = NULL;
    //getmemory(str);//此时传的是值,p不能改变str的内容
    getmemory(&str);
    strcpy(str, "hello world");//此时拷贝指向的是空指针,解引用NULL,拷贝失败,程序崩溃
    printf(str);
    free(str);
    str = NULL;
}
char* getmemory(void)
{
    char p[] = "hello world";
    return p;//返回栈空间地址,内容已销毁
}
void test(void)
{
    char* str = NULL;
    str = getmemory();
    printf(str);
}
int main()
{
    test();
    return 0;
}

相关文章:

形参动态内存开辟和柔性数组

//柔性数组 //定义&#xff1a;结构体最后一个成员允许是未知大小的数组 // 优点;在开辟空间时&#xff0c;连续开辟&#xff0c;便于释放空间&#xff0c;不会因多次开辟&#xff0c;导致释放空间出错 // 开辟空间时&#xff0c;节省动态开辟次数&#xff0c;节省空间&am…...

【LLM系列之指令微调】长话短说大模型指令微调的“Prompt”

1 指令微调数据集形式“花样”太多 大家有没有分析过 prompt对模型训练或者推理的影响&#xff1f;之前推理的时候&#xff0c;发现不加训练的时候prompt&#xff0c;直接输入模型性能会变差的&#xff0c;这个倒是可以理解。假如不加prompt直接训练&#xff0c;是不是测试的时…...

MacOS使用brew如何下载Nginx

首先&#xff0c;第一步切换源&#xff1a; 切换 brew.git 仓库地址&#xff1a; cd "$(brew --repo)" git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git 替换 homebrew-core.git 仓库地址: cd "$(brew --repo)/Library/Taps/home…...

linux ftp

使用ftp连接本机进行文件传输 1、下载vsftpd服务器程序 apt install vsftpd 2、使用tcp抓包 tcpdump -nt -i lo port 20 在FTP连接到本地主机&#xff08;127.0.0.1&#xff09;时&#xff0c;数据可能通过本地回环接口&#xff08;loopback interface&#xff09;传输&…...

你知道HTTP与HTTPS有什么区别吗?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、什么是HTTP&#xff1f; 二、什么是HTTPS&#xff1f; 三、HTTPS 的工作原理 1、客户端发起 HTTPS 请求 2、服务端的配置 3、…...

keil使用printf函数重定串口输出,程序卡在Reset_Handler

最近在做国产芯片GD32F103项目&#xff0c;使用printf()函数重定向USART0串口输出&#xff0c;发现程序没有运行&#xff0c;单步调试发现&#xff0c;程序卡在startup_gd32f10x.s文件的Reset_Handler处&#xff0c;记录一下解决方法。 解决办法&#xff1a; 1、引用头文件#in…...

Redis预热 雪崩 击穿 穿透

redis预热 在Redis中&#xff0c;预热是指在实际的负载之前&#xff0c;提前将数据加载到内存中&#xff0c;以便在请求到来时能够快速响应。预热可以减少冷启动时的延迟&#xff0c;并提高系统的性能。 有几种方法可以进行Redis的预热&#xff1a; 使用持久化机制&#xff1…...

Shell脚本学习-MySQL单实例和多实例启动脚本

已知MySQL多实例启动命令为&#xff1a; mysqld_safe --defaults-file/data/3306/my.cnf & 停止命令为&#xff1a; mysqladmin -uroot -pchang123 -S /data/3306/mysql.sock shutdown 请完成mysql多实例的启动脚本的编写&#xff1a; 问题分析&#xff1a; 要想写出脚…...

vue3搭建(vite+create-vue)

目录 前提条件 输入命令 对于Add an End-to-End Testing Solution nightwatch和Cypress 和 Playwright 运行 前提条件 熟悉命令行已安装 16.0 或更高版本的 Node.js &#xff08;node -v查看版本&#xff09; 输入命令 npm init vuelatest 这一指令将会安装并执行 create-…...

服务器中了360后缀勒索病毒怎么解决,360后缀勒索病毒解密数据恢复

某医药公司是一家小型企业&#xff0c;拥有自己的服务器存储重要数据和文件。某天早上&#xff0c;IT管理员发现企业服务器中了360后缀的勒索病毒&#xff0c;所有数据文件都被加密了。这个病毒的入侵让公司业务受到严重影响&#xff0c;企业立即启动了勒索病毒解密数据恢复的措…...

3000字详解:风控核心岗位及核心价值

01、信贷场景中所谓风控是什么&#xff1f; 从一个小故事说起&#xff1a; “风控是什么&#xff1f;” “你走过大桥么&#xff1f;” “桥上有栏杆么&#xff1f;” “有” “你过桥时会扶栏杆么” “一般不扶” “那栏杆是不是没必要有呢” “那还是得有啊&#xf…...

fiddler 手机抓包(含https) 完整流程

第一部分&#xff1a;下载并安装fiddler 一.使用任一浏览器搜索【fiddler下载安装】&#xff0c;并下载fiddler 安装包。 二.fiddler安装包下载成功后&#xff0c;将下载的fiddler压缩包解压到自定义文件夹【fiddler】或者解压到当前文件夹下&#xff0c;双击文件夹中的【fidd…...

ChatGPT学python——制作自己的AI模型(一)初步了解

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…...

多赛道出海案例,亚马逊云科技为企业提供全新解决方案实现高速增长

数字化浪潮之下&#xff0c;中国企业的全球化步伐明显提速。从“借帆出海”到“生而全球化”&#xff0c;中国企业实现了从低端制造出口&#xff0c;向技术创新和品牌先导的升级。为助力中国企业业务高效出海&#xff0c;亚马逊云科技于2023年6月9日在深圳大中华喜来登酒店举办…...

异步消息传递技术 JMS AMQP MQTT

广泛使用的三种异步消息传递技术&#xff1a;JMS AMQP MQTT JMS AMQP MQTT JMS&#xff08;Java Message Service)&#xff1a;一个类似JDBC的规范&#xff0c;提供了与消息服务相关的API接口 JMS消息模型&#xff1a; P2P 点对点模型&#xff1a;消息发到一个队…...

利用Python实现汉译英的三种方法

一、前言 有道翻译API&#xff08;主要推荐&#xff09; 百度翻译API&#xff08;需要申请key与密钥&#xff0c;每月100万免费字符&#xff09; 谷歌翻译API&#xff08;需要梯子&#xff0c;而且不稳定&#xff0c;不推荐&#xff09; 二、代码 1、判断文本是否存在中文…...

磁盘均衡器:HDFS Disk Balancer

HDFS Disk Balancer 背景产生的问题以及解决方法 hdfs disk balancer简介HDFS Disk Balancer功能数据传播报告 HDFS Disk Balancer开启相关命令 背景 相比较于个人PC&#xff0c;服务器一般可以通过挂载多块磁盘来扩大单机的存储能力在Hadoop HDFS中&#xff0c;DataNode负责最…...

蔚小理新势力互联网造车在CAN FD硬件主框架及后装控制方案开发

在国内&#xff0c;新势力造车影响已经非常之大&#xff0c;整个造车大潮中&#xff0c;新整车企业蔚来汽车、小鹏汽车、理想汽车无一例外选择了CAN FD作为主要的车载通信总线&#xff0c;特斯拉推出了引领汽车EE架构集中化的趋势&#xff0c;即使在车载以太网EE架构快速发展的…...

左叶子之和

404. 左叶子之和 简单&#xff08;有点意思 第一次我也写错了 先自己递归去写 如果不行看答案 我感觉还是蛮不错的&#xff09; 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15…...

Java版知识付费平台免费搭建 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台qt

&#xfeff;Java版知识付费源码 Spring CloudSpring BootMybatisuniapp前后端分离实现知识付费平台 提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含&#xff1a;录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署&#xff0c;免费售…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...