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

24/06/26(1.1129)动态内存

strtok 字符串分割函数

#include<stdio.h>


int main(){
    char str[] = "this,a sample string.";
    char* sep = ",";
    char* pch = strtok(str, sep);
    printf("%s\n", pch);
    while (pch != NULL){
        printf("%s\n", pch);
        pch = strtok(NULL, sep);
    }


    system("pause");
    return 0;
}

动态内存分配

为什么存在动态内存分配

动态内存函数介绍

        malloc

        free

        calloc

        realloc

常见的动态内存错误

柔性数组

为什么动态内存分配?

int val = 20;//在栈空间上开辟四个字节

char arr[10] = {0};//在栈空间上开辟十个字节的连续空间

但是上述开辟空间的方式有两个特点:

1.空间开辟的大小是固定的

2.数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配

但是对于空间的需求,不仅是上述情况,有时候需要空间大小在程序运行的时候只能试试动态内存开辟了.

#include<stdio.h>

int g = 0;

void fun(int x, int y){
    int m; //局部变量
    int n;
}

int main(){
    //静态开辟 栈区
    int a = 10;
    char* str = "hello";
    int arr[10] = { 0 };

    system("pause");
    return 0;
}

stack栈区:(局部变量,函数的参数)

heap堆区:自由存储区 malloc free

static静态常量区:(静态定义的对象,字符串常量)

malloc 和 free

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>


void main(){
    int n;
    printf("input n:");
    scanf("%d",&n);
    //动态内存开辟
    int* arr = (int *)malloc(sizeof(int) * n);//n int
    if (NULL == arr){
        printf("neicunyichu");
        return ;
    }
    for (int i = 0; i < n; i++){
        arr[i] = i + 1;
    }
    for (int i = 0; i < n; i++){
        printf("%d", arr[i]);
    }
    printf("\n");

    free(arr);//释放哦
    system("pause");
    
}

void main(){
    int *p = (int*)malloc(100);
    free(p);//释放空间

    system("pause");
    
}

释放p之后这片内存已经释放了,但指针*p依旧指向这块内存,它已经变成了野指针.

所以要对它赋值 NULL

p = NULL;//释放指针

calloc和malloc很像,一般用malloc代劳

void main(){
    int *p = (int*)malloc(sizeof(int) * 10);
    if (NULL == p)
        return 0;

    int *p1 = (int*)calloc(10,sizeof(int));//会把申请的空间初始化
    if (NULL == p1)
        return 0;

realloc 对申请空间的大小进行调整

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>


void main(){
    int n = 5;
    int* p = (int*)malloc(sizeof(int)* n);
    if (NULL == p){
        printf("yichule");
        return ;
    }
    for (int i = 0; i < n; i++){
        p[i] = i + 1; //1 2 3 4 5
    }
    for (int i = 0; i < n; i++){
        printf("%d",p[i]);
    }
    printf("\n");

    //1 2 3 4 5 6 7 8 9 10
    n = 10;
    p = realloc(p, sizeof(int)* n);

if(NULL = p){

printf("yichule");

return;

}
    for (int i = 5; i < n; i++){
        p[i] = i + 1; //1 2 3 4 5 x x x x x
    }
    for (int i = 0; i < n; i++){
        printf("%d",p[i]); //1 2 3 4 5
    }
    printf("\n");
    system("pause");
    
}

.bss段 一般来存放未初始化的全局变量;

被初始化的在.data段即数据段(在静态常量区).

柔性数组:

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

typedef struct test
{
    char a;
    double b;
    int c;
    char arr[0];//柔性数组成员 不占空间
}test;

void main(){
    printf("size = %d\n",sizeof(test));
    system("pause");
    
}

相关文章:

24/06/26(1.1129)动态内存

strtok 字符串分割函数 #include<stdio.h> int main(){ char str[] "this,a sample string."; char* sep ","; char* pch strtok(str, sep); printf("%s\n", pch); while (pch ! NULL){ printf("%s\…...

基于 elementUI / elementUI plus,实现 主要色(主题色)的一件换色(换肤)

一、效果图 二、方法 改变elementUI 的主要色 --el-color-primary 为自己选择的颜色&#xff0c;核心代码如下&#xff1a; // 处理主题样式 export function handleThemeStyle(theme) {document.documentElement.style.setProperty(--el-color-primary, theme) } 三、全部代…...

js 计算某个日期加月份最后月份不会增加或者跳变

/** * * param {*} dateString 原来日期 2023-12-31 * param {*} months 加月份 2 * returns 2024-02-29 */ export function getDateByMonth(dateString, months0) { console.log(1); let oldMonths dateString.substring(0,7); let day dateString.substring(8); let …...

Git简介与详细教程

一、简介 什么是Git&#xff1f; Git是一款分布式版本控制系统&#xff0c;由Linux之父Linus Torvalds于2005年开发。它旨在快速、高效地处理从小型到大型项目的所有内容。Git与传统的版本控制系统相比&#xff0c;具备显著的优势&#xff0c;主要体现在其分布式架构、强大的…...

创建OpenWRT虚拟机

环境&#xff1a;Ubuntu 2204&#xff0c;VM VirtualBox 7.0.18 安装必备软件包&#xff1a; sudo apt update sudo apt install subversion automake make cmake uuid-dev gcc vim build-essential clang flex bison g gawk gcc-multilib g-multilib gettext git libncurses…...

智慧安防新篇章:如何科学设定可燃气体报警器校准检测周期

随着科技的快速发展&#xff0c;智慧安防系统已成为现代社会不可或缺的一部分。在各类安全监测设备中&#xff0c;可燃气体报警器因其对潜在危险的及时预警功能而备受关注。 接下来&#xff0c;佰德将围绕可燃气体报警器的校准检测周期进行深入探讨&#xff0c;以确保其在智慧…...

如何优化Spring Boot应用的启动时间

如何优化Spring Boot应用的启动时间 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将讨论如何优化Spring Boot应用的启动时间&#xff0c;提升应用的性…...

(Effective C) 2.3 作用域

(Effective C) 2.3 作用域 文章目录 (Effective C) 2.3 作用域前言&#x1f522;4大作用域1️⃣文件作用域2️⃣块作用域3️⃣函数原型作用域4️⃣函数作用域 ⭐作用域性质&#x1f4d6;实例CodeEND关注我 前言 作用域应用于标识符的某个特定声明。 标识符包含对象&#xff0…...

Python 基础 (标准库):堆 heap

1. 官方文档 heapq --- 堆队列算法 — Python 3.12.4 文档 2. 相关概念 堆 heap 是一种具体的数据结构&#xff08;concrete data structures&#xff09;&#xff1b;优先级队列 priority queue 是一种抽象的数据结构&#xff08;abstract data structures&#xff09;&…...

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-30Kaggle竞赛:图片分类

30Kaggle竞赛&#xff1a;图片分类 比赛链接&#xff1a; https://www.kaggle.com/c/classify-leaves 导入包 import torch import torchvision from torch.utils.data import Dataset, DataLoader from torchvision import transforms import numpy as np import pandas as…...

【LeetCode】每日一题:数组中的第K大的元素

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 解题思路 第一种是快排&#xff0c;快…...

Keil5.38ARM,旧编译器(V5)安装

站内文章KEIL5MDK最新版(3.37)安装以及旧编译器(V5)安装_keil5 mdk-CSDN博客...

【perl】脚本编程的一些坑案例

引言 记录自己跳进的【perl】编程小坑&#xff0c;以己为鉴。 1、eq $str1 "12345\n"; $str2 "12345"; if ($str1 eq $str2) { print "OK" } 上述代码不会打印 OK。特别在读文件 &#xff0c;匹配字符串时容易出BUG。 案例说明&#xff1a; 有…...

MIX OTP——使用 GenServer 进行客户端-服务器通信

在上一章中&#xff0c;我们使用代理来表示存储容器。在 mix 的介绍中&#xff0c;我们指定要命名每个存储容器&#xff0c;以便我们可以执行以下操作&#xff1a; 在上面的会话中&#xff0c;我们与“购物”存储容器进行了交互。 由于代理是进程&#xff0c;因此每个存储容器…...

2024年云安全发展趋势预测

《2024年云安全发展趋势预测》 摘要&#xff1a; 云计算的普及带来了新的安全挑战。本文汇总了多家云安全厂商、专业媒体和研究机构对2024年云安全发展趋势的预测&#xff0c;为企业组织提供了洞察云安全威胁的新视角。 云计算的灵活性和可扩展性使其成为企业关键任务负载的首…...

java.io.eofexception:ssl peer shut down incorrectly

可能是因为 1)https设置 2&#xff09;超时设置 FeignConfig.java package zwf.service;import java.io.IOException; import java.io.InputStream; import java.security.KeyStore;import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory;import org.apac…...

Unity之HTC VIVE Cosmos环境安装(适合新手小白)(一)

提示&#xff1a;能力有限&#xff0c;错误之处&#xff0c;还望指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、unity版本电脑配置相关关于unity版本下载建议&#xff1a;0.先下载unity Hub1.不要用过于旧的版本2.不要下载最新版本或者其他非长期支持版本 二、官网下…...

入门JavaWeb之 Response 验证码和重定向

Response 写验证码&#xff1a; package com.demo.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse…...

2024-06-26 问AI: 在大数据模型中,deep speed 是什么?

文心一言 在大数据模型中&#xff0c;DeepSpeed是一个由微软开发并维护的开源深度学习优化库。其主要目的是提高大规模模型训练的效率和可扩展性&#xff0c;帮助开发者更有效率地管理及优化大模型的训练、部署任务。以下是DeepSpeed的主要特点和功能&#xff1a; 提高效率和…...

mobaxterm x11 转发Ubuntu mac

目录 royal tsx —— 一款Mac平台MobaXterm平替工具 mobaxterm x11 转发Ubuntu 软件 royal tsx —— 一款Mac平台MobaXterm平替工具 Royal Apps Termius Mac mobaxterm x11 转发Ubuntu 软件 所以直接在 ssh 的时候加上 - X 就可以了 ssh -X -p xxx usernameIP 运行 xclock …...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

微服务商城-商品微服务

数据表 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 商…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...