C/C++基础----内存相关

malloc分配内存

用法

  • 参数为要开辟内存的大小(字节为单位)
  • 返回值为void*,所以要强转一下
  • 语法:
    malloc()
    
  • 动态开辟20个字节的内存,代码:
    #include <iostream>
    
    using namespace std;
    
    int main() {
        int *a = (int *) malloc(sizeof(int) * 5);
        a[0] = 111;
        a[1] = 222;
        a[2] = 333;
        a[3] = 444;
        a[4] = 555;
        for (int i = 0; i < 5; i++)
            cout << a[i] << endl;
        return 0;
    }
    

开辟完内存不赋值里面的值

  • 如果用malloc开辟完内存不初始化值,里面的值就会是乱七八糟的。

    #include <iostream>
    
    using namespace std;
    
    int main() {
        int *a = (int *) malloc(5 * sizeof(int));
        if (a == nullptr) {
            cout << "内存分配失败!" << endl;
        } else {
            cout << a[0] << endl;
            cout << a[1] << endl;
            cout << a[2] << endl;
            cout << a[3] << endl;
            cout << a[4] << endl;
        }
        return 0;
    }
    

    在这里插入图片描述

内存开辟失败

  • 如果内存开辟失败则返回0
  • c++中的nullptr来判断一个指针是不是空指针,但是在c中不能用,在c中只能判断是不是0
    #include <iostream>
    
    using namespace std;
    
    int main() {
        int *a = (int *) malloc(sizeof(int) * 9999999999999999999);
        cout << a << endl;
        if (a == nullptr) {
            cout << "内存开辟失败!" << endl;
        }
        return 0;
    }
    
    在这里插入图片描述

使用完清空内存

  • free()方法清空分配的内存
    #include <iostream>
    
    using namespace std;
    
    int main() {
        int *a = (int *) malloc(sizeof(int) * 1);
        if (a == nullptr) {
            cout << "内存开辟失败!" << endl;
        } else {
            *a = 200;
            cout << "开辟的内存地址:" << a << endl;
            cout << "a的值:" << *a << endl;
            free(a);
            cout << "清空内存后a的值:" << *a << endl;
        }
        return 0;
    }
    
    在这里插入图片描述

calloc分配内存

用法和清空内存

  • 返回值、清空内存和判断是否空指针用法和malloc一样

  • 语法:

    calloc(开辟内存的个数,单个的大小)
    
    #include <iostream>
    
    using namespace std;
    
    int main() {
        int *a = (int *) calloc(10, sizeof(int));
        if (a == nullptr) {
            cout << "内存分配失败!" << endl;
        } else {
            *a = 200;
            cout << *a << endl;
            free(a);
            cout << *a << endl;
    
        }
        return 0;
    }
    

    在这里插入图片描述

开辟完内存不初始化和malloc不同

  • 都初始化为了0

    #include <iostream>
    
    using namespace std;
    
    int main() {
        int *a = (int *) calloc(10, sizeof(int));
        if (a == nullptr) {
            cout << "内存分配失败!" << endl;
        } else {
            cout << a[0] << endl;
            cout << a[1] << endl;
            cout << a[2] << endl;
    
        }
        return 0;
    }
    

    在这里插入图片描述


realloc重新分配内存

用法和清空内存

  • 返回值、清空内存用法和malloc一样

  • 开辟出的内存不赋值类似于malloc,值都是乱七八糟的

  • 重新分配内存空间时,之前指针里面的值不会变,相当于把之前指针中德内容复制过来了。

    realloc(原内存地址,重新分配的大小(单位为字节))
    
  • 重新分配后,原指针首地址可能会变可能不会变

    #include <iostream>
    
    using namespace std;
    
    int main() {
        int *a = (int *) calloc(5, sizeof(int));
        if (a == nullptr) {
            cout << "内存分配失败!" << endl;
        } else {
            a[0] = 111;
            cout << "未重新分配时a的地址:" << &a[0] << endl;
            a = (int *) realloc(a, 10 * sizeof(int));
            cout << "重新分配时a的地址:" << &a[0] << endl;
            cout << a[0] << endl;
    
    
        }
        return 0;
    }
    

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


new 关键字分配内存

用法

  • 清空内存使用delete 指针 如果是数组使用delete[] 指针

  • 开辟内存后不初始化和malloc一样,值乱七八糟

    #include <iostream>
    
    using namespace std;
    
    int main() {
        int *a = new int[5];
        cout << a << endl;
        a[0] = 11;
        a[1] = 22;
        a[2] = 33;
        a[3] = 44;
        a[4] = 55;
        for (int i = 0; i < 5; i++) {
            cout << a[i] << endl;
        }
        delete[] a;
        cout << a[1] << endl;
        return 0;
    }
    

    在这里插入图片描述

内存分配失败时抛出一个异常

在这里插入图片描述


memcpy复制内存

用法

  • 可以全部复制也可以复制一部分
memcpy(要复制到哪的内存地址,复制的内存地址,要复制的长度)
#include <iostream>

using namespace std;

int main() {
    bool flag = false;
    int *p_a = new int[5];
    int *p_b = new int[10];
    p_a[0] = 11;
    p_a[1] = 22;
    p_a[2] = 33;
    p_a[3] = 44;
    p_a[4] = 55;
    memcpy(p_b, p_a, 5 * sizeof(int));
    cout << p_b << endl;
    for (int i = 0; i < 10; i++) {
        if (i > 4 and !flag) {
            cout << "---------" << endl;
            flag = true;
        }
        cout << p_b[i] << endl;
    }
    return 0;
}

在这里插入图片描述

  • 展示一下new int开辟内存未赋值下的值乱七八糟。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安全加速SCDN带的态势感知能为网站安全带来哪些帮助

随着安全加速SCDN被越来越多的用户使用&#xff0c;很多用户都不知道安全加速SCDN的态势感知是用于做什么的&#xff0c;德迅云安全今天就带大家来了解下什么是态势感知&#xff0c;态势感知顾名思义就是对未发生的事件进行预知&#xff0c;并提前进行防范措施的布置&#xff0…

内网渗透-Earthworm的简单使用(内网穿透工具)

Earthworm的简单介绍&#xff08;一&#xff09; 文章目录 EarthWorm下载地址1. 普通网络 1.1 跳板机存在公网IP 1.1.1 网络环境1.1.2 使用方法1.1.3 流量走向 1.2 跳板机不存在公网IP&#xff0c;可出网 1.2.1 网络环境1.2.2 使用方法1.2.3 流量走向 2. 二级网络 2.1 一级跳…

系统架构最佳实践 -- 金融企业的资损问题介绍

什么是资损 资损通常来讲是指支付场景下的资金损失&#xff0c;这里可以从两个维度看 用户角度&#xff1a;多扣用户款导致用户资金损失&#xff0c;此问题一般需要通过客服等渠道反馈&#xff0c;可以把多的钱退给用户&#xff0c;但是很大程度上损失了用户体验&#xff1b; …

ESP32 S3音频开发

1. 音频硬件框架 Codec&#xff1a;音频编解码芯片&#xff0c;一种低功耗单声道音频编解码器&#xff0c;包含单通道 ADC、单通道 DAC、低噪声前置放大器、耳机驱动器、数字音效、模拟混音和增益功能。它通过 I2S 和 I2C 总线与 ESP32-S3-WROOM-1 模组连接&#xff0c;以提供独…

计算机视觉实验五——图像分割

计算机视觉实验五——图像分割 一、实验目标二、实验内容1.了解图割操作&#xff0c;实现用户交互式分割&#xff0c;通过在一幅图像上为前景和背景提供一些标记或利用边界框选择一个包含前景的区域&#xff0c;实现分割①图片准备②代码③运行结果④代码说明 2.采用聚类法实现…

64B/66B GT Transceiver 配置

一、前言 前一篇文章已经讲述了64B/66B的编码原理&#xff0c;此篇文章来配置一下7系列GT的64B/66B编码。并讲述所对应的例子工程的架构&#xff0c;以及部分代码的含义。 二、IP核配置 1、打开7 Series FPGAs Transceiver Wizards&#xff0c;选择将共享逻辑放置在example …

全局代理导致JetBrains IDE CPU占用高,jdk.internal.net.http.common

GoLand版本&#xff1a;2022.3.4 解决办法&#xff1a; 使用SOCKS代理代替HTTP代理 禁用Space和Code With Me插件 禁用 TLS V1.3&#xff0c;参考&#xff1a;https://stackoverflow.com/questions/54485755/java-11-httpclient-leads-to-endless-ssl-loop 参考 https://…

强大的压缩和解压缩工具 Keka for Mac

Keka for Mac是一款功能强大的压缩和解压缩工具&#xff0c;专为Mac用户设计。它支持多种压缩格式&#xff0c;包括7z、Zip、Tar、Gzip和Bzip2等&#xff0c;无论是发送电子邮件、备份文件还是节省磁盘空间&#xff0c;Keka都能轻松满足用户需求。 这款软件的操作简单直观&…

【OpenHarmony】XTS环境配置

零、参考 1、xts测试环境配置&#xff1a;https://www.yuque.com/u25440504/ehvzki/ik2fso 2、Windows安装Python、pip、easy_install的方法&#xff1a;https://pythonjishu.com/bmxqeisbkzgrpnn/ 3、Python中easy_install 和 pip 的安装及使用&#xff1a; https://blog.c…

C语言之offsetof实现分析(九十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

做一个后台项目的架构

后台架构的11个维度 架构1&#xff1a;团队协助基础工具链的选型和培训架构2&#xff1a;搭建微服务开发基础设施架构3&#xff1a;选择合适的RPC框架架构4&#xff1a;选择和搭建高可用的注册中心架构5&#xff1a;选择和搭建高可用的配置中心架构6&#xff1a;选择和搭建高性…

React 19 的新增功能:Action Hooks

React 是前端开发领域最流行的框架之一。我喜欢 React 是因为它背后的团队和社区对它的热情。当社区提出新功能和改进的需求时&#xff0c;团队会倾听&#xff0c;React 的未来是令人兴奋和有趣的。 让我们来看一下 React 19 中令开发人员提升开发效率的新特性。对于每个钩子&…

STL--list双向链表

功能 将数据进行链式存储 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成&#xff1a;链表由一系列结点组成 结点的组成&#xff1a;一个是存储数据元素的数据域&#xff0…

FJSP:袋鼠群优化(Kangaroo Swarm Optimization ,KSO)算法求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题&#xff08;Flexible Job Shop Scheduling Problem&#xff0c;FJSP&#xff09;&#xff0c;是一种经典的组合优化问题。在FJSP问题中&#xff0c;有多个作业需要在多个机器上进行加工&#xff0c;每个作业由一系列工序组成&a…

传统图机器学习的特征工程-连接

概念及应用场景 通过已知连接补全未知连接 将link编码成为向量输入到机器学习模型中&#xff1a; 1.直接提取link的特征&#xff0c;构建D维向量 2.把link两段节点的D维向量拼在一起&#xff08;丢失了link本身的连接结构信息&#xff09; 应用&#xff1a; 1.客观静态图…

webrtc中的Track,MediaChannel,MediaStream

文章目录 Track,MediaChannel,MediaStream的关系MediaStream的创建流程创建VideoChannel的堆栈创建VideoStream的堆栈 sdp中媒体参数信息的映射sdp中媒体信息参数设置体系参数设置流程参数映射体系 Track,MediaChannel,MediaStream的关系 Audio/Video track&#xff0c;MediaC…

Spring Boot | Spring Boot中进行 “文件上传” 和 “文件下载”

目录: 一、SpringBoot中进行 " 文件上传" :1.编写 "文件上传" 的 “表单页面”2.在全局配置文件中添加文件上传的相关配置3.进行文件上传处理&#xff0c;实现 "文件上传" 功能4.效果测试 二、SpringBoot中进行 "文件下载" :“英文名称…

【opencv】示例-stereo_match.cpp 立体匹配:通过对左右视图图像进行处理来生成视差图和点云数据...

/** stereo_match.cpp* calibration** 创建者 Victor Eruhimov&#xff0c;日期为 2010年1月18日。* 版权所有 2010 Argus Corp.**/#include "opencv2/calib3d/calib3d.hpp" // 导入OpenCV相机标定和三维重建相关的头文件 #include "opencv2/imgproc.hpp&qu…

stm32移植嵌入式数据库FlashDB

本次实验的程序链接stm32f103FlashDB嵌入式数据库程序资源-CSDN文库 一、介绍 FlashDB 是一款超轻量级的嵌入式数据库&#xff0c;专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同&#xff0c;FlashDB 结合了 Flash 的特性&#xff0c;具有较强的性能…

【GD32】INA226电压电流功率检测模块

2.46 INA226电压电流功率检测模块 2.46.1 模块来源​ 采购链接&#xff1a;​ INA226电压电流功率检测模块 资料下载&#xff1a;&#xff08;基于该模块的资料&#xff0c;百度云链接等&#xff09;​ 链接&#xff1a;http://pan.baidu.com/s/1c0DbuXa 密码&#xff1a;3p2…