当前位置: 首页 > 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 …...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...