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

【C++】C++中的动态内存分配(new和delete)

C++中的动态内存分配(分配堆空间)

    • 1. C语言与C++动态内存分配
    • 2. 使用
    • 3.malloc和new有什么区别
    • 示例代码:

1. C语言与C++动态内存分配

  • C语言

    malloc calloc realloc free 函数

  • C++

    new关键字分配堆空间
    delete关键字释放堆空间

2. 使用

  • 第一种:分配一个int大小的堆空间

    int *p=malloc(sizeof(int));
    int *p=new int; delete p;

  • 第二种:分配一个int大小的堆空间,并赋值

    int *p=malloc(sizeof(int));
    *p=999;
    int *p=new int(999); delete p;

  • 第三种:分配多个int大小的堆空间

    int p=malloc(999sizeof(int));
    int *p=new int[999]; delete []p;
    p[1]=55;
    *(p+1)=99;

  • 注意:
    第一个: new int(999)和new int[999]的区别
    第二个: delete只要new分配堆空间的时候使用了[],那么delete对应写上[]

3.malloc和new有什么区别

  • 区别1:malloc是个库函数,new是关键字
  • 区别2:free释放,delete释放

示例代码:

#include <iostream>  //C++的标准输入输出流头文件
#include <cstring>  //#include <string.h>
using namespace std; //我要使用命名空间std
/*
    new申请堆空间
       公式:new 数据类型
    delete释放堆空间
*/

struct student
{
    char name[10];
    int age;
};

int main()  
{
    //申请一个int大小的堆空间
    int *p=new int;  //int *p=malloc(sizeof(int))
    
    //申请多个int大小的堆空间
    int *p1=new int[10];  //int *p1=malloc(10*sizeof(int))
    
    //申请一个int大小的堆空间,给它赋初始值
    //()表示赋值,[]表示申请多少个类型的堆空间
    int *p2=new int(10);  //int *p2=malloc(sizeof(int))  *p2=10
    
    struct student *p3=new struct student;
    struct student *p4=new struct student[8];
    
    //使用堆空间--》C语言的知识
    *p=456;
    *p1=10;       //p1[0]=10
    *(p1+1)=11;   //p1[1]=11
    strcpy(p3->name,"张三");
    p3->age=18;
    
    cout<<"*p is: "<<*p<<endl;
    cout<<"*p2 is: "<<*p2<<endl;
    //释放堆空间
    //如果申请的时候用到了[],释放的时候就必须用[]
    delete p;
    delete []p1;
    delete p2;
    delete p3;
    delete []p4;
    return 0;
}

相关文章:

  • 2025前端面试题(vue、react、uniapp、微信小程序、JS、CSS、其他)
  • 从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.1从零编写类GPT-2模型架构(规划模块与代码组织)
  • 详细介绍RECT结构体
  • 09_从经典论文入手Seq2Seq架构
  • spring-security原理与应用系列:核心过滤器
  • 设置 Ollama 模型下载位置
  • Spring 线程
  • 微信小程序如何接入直播功能
  • [leetcode]map的用法
  • SpringBoot-配置文件中敏感信息的加密保姆级教程
  • Solr-搜索引擎-入门到精通
  • Ubuntu与Windows之间相互复制粘贴的方法
  • Spring MVC 请求与响应
  • Node.js下载安装配置指南(精简)
  • 给Web开发者的HarmonyOS指南02-布局样式
  • AndroidTV 直播电视-v20250323-第三方电视直播APP
  • 【设计模式】深入解析装饰器模式(Decorator Pattern)
  • SpringBoot通过Map实现天然的策略模式
  • 一文解读DeepSeek的安全风险、挑战与应对策略
  • 蓝桥杯2022年第十三届决赛真题-最大数字
  • 视频聊天室网站开发/阿里妈妈推广网站
  • 做新媒体广告的网站/口碑好的设计培训机构
  • 旅游网站设计的目的/智能营销系统
  • 佛山网站建设哪个好点/百度搜索引擎优化
  • 义乌小商品市场进货渠道/如何进行关键词优化工作
  • 营销型网站建设域名/怎么做一个网站平台