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开辟内存未赋值下的值乱七八糟。

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

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

相关文章

基于Hadoop的电商用户行为分析系统设计与实现的系统架构设计

采集层&#xff1a;利用Flume采集电商服务器端用户行为数据&#xff0c;把数据处理后发送至HDFS。 存储层&#xff1a;用户行为数据采集上传至HDFS存储&#xff0c; 导入到数据仓库Hive进行计算处理&#xff0c;分析结果保存至MySql数据库中。 计算层&#xff1a;根据分析需求建…

Vue2+ElementUI的el-table实现新增数据行与删除的功能

Vue2ElementUI的el-table实现新增数据行与删除的功能 文章目录 Vue2ElementUI的el-table实现新增数据行与删除的功能1. 代码2. 效果 1. 代码 TableIndex.vue如下 <template><div><div><el-button click"add" class"filter-item" pl…

通过ABAP程序自动创建信息对象-第二弹

前言 上一篇讲了通过ABAP程序去自动生成BW的ADSO模型&#xff0c;这一篇讲讲信息对象的自动生成&#xff0c; 一、实现效果 对于BW顾问来说&#xff0c;模型建完之后&#xff0c;就要开始选择用字段还是用信息对象进行建模&#xff0c;如果信息对象不存在呢&#xff0c;那么…

SpringBoot整合Activiti7——实战之放假流程(会签)

文章目录 代码实现部署流程启动流程填写放假通知任务投票审批xml文件 会签场景&#xff1a; 开始 - 填写放假通知单&#xff08;代理人&#xff09;- 投票审批&#xff08;指定多个参与人&#xff09;- 根据设置的完成条件后&#xff0c;全部参与人必须完成后&#xff0c;自动结…

小米su7全力提高产能,小米su7的这几个问题你都知道吗?车载随身wifi哪款最好用?公认最好的随身wifi格行随身wifi怎么样?

小米汽车官方近日回应网友关切&#xff0c;透露小米SU7非创始版交付进度。工厂正处于生产爬坡阶段&#xff0c;正全力提升产能和物料准备节奏&#xff0c;以加快交付效率。对于锁单后能否调整提车时间&#xff0c;小米汽车表示将与销售沟通协商。 当然关于网友们的问题也进行了…

条码的基础知识

条码的基础知识 条码&#xff1a;条码是由一组按一定编码规则排列的条、空符号组成&#xff0c;用以表示一定的字符、数字及符号组成的信息 一维码 Code 128 Code 128 是一种密度很高的字母数字代码系统&#xff0c;可对其进行双向扫描。此代码系统可编码整个 128 ASCII 字…

Python 类方法注解 @classmethod 作用和意义

classmethod 在Python中&#xff0c;为类的方法使用classmethod装饰器具有以下作用和用途&#xff1a; 访问类属性而不实例化&#xff1a; 类方法能够直接通过cls参数访问类级别的属性、常量或类变量&#xff0c;而无需创建类的实例。这在需要基于类的状态进行操作时非常有用&…

ERROR in [eslint] reorder to top import/first

情景再现&#xff1a;在react开发的时候&#xff0c;导入组件、函数时报错&#xff1a;Import in body of module; reorder to top import/first … 原因&#xff1a;在import语句前有变量声明 解决&#xff1a; 变量的声明&#xff0c;要放在import之后 // 错误示例 import {…

物联网网络传输,STM32和ESP32

2024.4.17 今天主要是记录一下我这个STM32F407和esp8266组成的互联网板子的一些例程运行心得&#xff0c; 下面这个例程是STM32发AT指令给esp8266&#xff0c;使得esp8266作为tcp client连接到我的手机热点&#xff0c;然后我用电脑连接wifi&#xff0c;打开tcp server&#x…

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能

【CDN产品测评-笔记】探索云服务中的安全和性能增强功能 写在最前面1. DNS管理&#xff1a;核心的域名服务功能2. DDoS防护&#xff1a;构筑坚不可摧的防线3. Web防护&#xff1a;智能化的网络攻击防御4. BOT管理&#xff1a;精准识别与流量控制5. 加速服务&#xff1a;提升全球…

【动态规划 区间dp 位运算】3117. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode3117. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数组…

【python】ptthon函数自学

print("Hello Python world!") # 变量 message"Hello" print(message) message"Hello Python world!" print(message)# 引号&#xff1a;可以是单&#xff0c;可以是双 messageI told my friend, "Python is my favorite language!" p…

C# 字段和属性的区别

区别 在C#中&#xff0c;字段&#xff08;Field&#xff09;和属性&#xff08;Property&#xff09;都是用来封装对象状态的方式&#xff0c;但它们有以下区别&#xff1a; 访问级别&#xff1a; 字段通常是private&#xff0c;而属性可以有不同级别的访问限制&#xff08;…

JavaScript 实现大数简化,带单位显示

一、场景 在前端展示的数据时&#xff0c;如果数据数值太大&#xff0c;会导致展示的数据非常长&#xff0c;不仅用户不能迅速读出数值大小而且影响美观&#xff0c;此时我们需要将这种大数简化为带单位的数值&#xff0c;如 250000 转为 25.0万。 二、实现函数 // 大数简化函…

各RAID级别的特点以及对应的容量计算方式

RAID&#xff08;Redundant Array of Independent Disks&#xff09;是一种将多个独立的硬盘组合起来以提高数据存储性能、容量或冗余度的技术。在实际项目中&#xff0c;通常采购的磁盘阵列支持设置对应的RAID级别。本人也进行过实战&#xff0c;而现在为了应对软考来总结一下…

【攻防世界】lottery

弱比较代码审计 本题已提供源码&#xff0c;如果没提供&#xff0c;输入/robots.txt&#xff0c;发现/.git function buy($req){require_registered();require_min_money(2);$money $_SESSION[money];//接受用户原有money$numbers $req[numbers];//接受输入的数字$win_num…

【JS】数组去重

方式一&#xff1a;使用 Set const handler (array) > {return [...new Set(array)]; } const array [1, 2, 2, 3, 3, 4, 5, 5]; console.log(handler(array)); // [1, 2, 3, 4, 5]方式二&#xff1a;使用filter const handler (array) > {return array.filter((ite…

pytest的request fixture:实现个性化测试需求

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在前文章中&#xff0c;我们看到pytest_repeat源码中有这…

Android 13 有线以太网静态ip保存逻辑梳理分析

源码环境&#xff1a;高通Android 13 这里特别说明&#xff0c;Android13中&#xff0c;ipconfig.txt配置文件目录有改变 以前&#xff1a;/data/misc/ethernet/ipconfig.txt 最新的有线网配置文件保存目录&#xff1a; /data/misc/apexdata/com.android.tethering/misc/ethe…

C++类和对象第二弹(构造,析构和拷贝构造函数)

目录 前言 1. 类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3. 析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 总结 前言 本文主要讲解类中构造函数、析构函数和拷贝构造函数。关于这三个类中默认成员函数的知识点很多&#xff0c;有许多…