C++第七节课 new开辟空间 delete释放空间
#include <iostream> using namespace std;
// C中开辟空间的方式 所有的返回值 都是 void *
/// int * p = (int*)malloc(sizeof (int))
/// malloc 在堆上开辟空间并没有进行初始化
///
/// int* pa = (int*)calloc(1,sizeof (int));
/// calloc 在堆上开辟空间是有初始化的
/// 在原来的基础上 pa 再次开辟 10 个空间
///
/// int *pa1 = (int*)realloc(pa,sizeof(int)*10);
/// 原来空间的数据 拷贝一份 (pa)
/// realloc 在堆上开辟空间是有初始化的
/// 释放空间
/// free(p)
/// free(pa)
/// free(pa1)
/// 同一块堆区空间被多次释放会造成 doublefree 的现象,程序会异常终止
///
// C++中开辟空间的方式
/// C++中提供了关键字 new 来动态开辟空间 ,为了释放空间 提供了关键字delete 来释放空间
/// 堆上的空间手动申请,手动释放,不然就是内存泄露
/// 使用 new + 类型 [N] 动态开辟 N 个类型的空间
/// 如果是连续开辟空间要释放使用 delete [] 进行释放
/// 对于内置类型而言 new 相当于是 malloc delete 相当于是 free
/// 内置类型和自定义类型
/// 如果是自定义类型 new 代表两种含义,1. 开辟空间 2. 调用类中的构造函数进行初始化
/// delete 代表2中含义:调用类中的析构函数,释放空间
///
/// new 和 malloc 的联系
/// new 的底层就是使用 malloc 实现的
/// malloc 如果申请空间失败返回 Null
/// new 如果申请空间失败抛出异常 bad_alloc()
/// new 是按照类型开辟空间的 , 而 malloc 是按字节为单位开辟空间的
/// 对自定义的类型来说,new 不仅开辟空间 还会调用自定义类中的构造函数
/// delete 不经释放空间 还会先调用自定义类中的析构函数
int main()
{
// new 开辟空间的方式是使用new按照类型直接开辟的空间
// 同时,在内置类型的后面加上 () 表示编译器在括号取值初始化内置类型所开辟的内存中的值
int *p = new int(); // 动态连续开辟空间
int* pb = new int[1024]; // 连续开辟空间并初始化
int* pc = new int[1024]{1,2,3}; // 开辟空间并赋值 C++11的新语法 // 使用 delete 释放已经开辟的空间
delete p;
delete [] pb;
delete [] pc;
cout << "Hello World!" << endl;
return 0; }
C++第七节课 new开辟空间 delete释放空间的更多相关文章
- centos Linux下磁盘管理 parted,df ,du,fdisk,partprobe,mkfs.ext4,mount,/etc/fstab,fsck,e2fsck,mk2efs,tmpfs ,nr_inodes, LVM,传统方式扩容文件系统 第七节课
centos Linux下磁盘管理 parted,df ,du,fdisk,partprobe,mkfs.ext4,mount,/etc/fstab,fsck,e2fsck,mk2efs,tmpf ...
- new/new[]和delete/delete[]是如何分配空间以及释放空间的
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为或堆(heap).程序可以用堆来存储动态分配的对象,即那些在程序运行时创建的对象.动态对象的生存期由程序来控制 ,当动 ...
- 《linux就该这么学》第七节课:文件的各种权限以及linux分区命名规则
笔记 (借鉴请改动) 5.3:文件特殊权限 SUID 临时拥有文件所有者的权限(基本上只是执行权限) SGID 临时拥有文件所有组的权限,在目录中创建文件自动继承该目录的用户组. SBIT 粘滞 ...
- html第七节课
document 1.Window.document对象 一.找到元素: docunment.getElementById("id"):根据id找,最多找一个: var a ...
- 7、第七节课,js逻辑运算
1.条件语句 function MyClick() { ; ; ; if (iNum1==iNum2) { iNum2=iNum3; } alert(iNum2); } 2. iNum3=iNum1& ...
- Linux第七节课学习笔记
RHEL7用户身份有以下这些: 1.管理员 root UID:0 权限最大: 2.系统用户 UID:1-999: 3.普通用户 UID:1000+. 一个用户基本组只有一个,扩展组可多个,创建扩展组用 ...
- php第七节课
多态,重载,克隆 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- C#第七节课
for嵌套 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...
- delete释放空间时出错的原因
int *a=new int[10]; ...... delete []a; 后面“delete []a;”出现错误的情况大致有: 1 数组的首地址a被你有意无意更改了,如:a++之类的: 2 变量的 ...
- 为什么delete后磁盘空间没有释放而truncate会释放?
背景 因项目需求,需要清理一批旧数据,腾出空间给新数据,让同事负责这件事.料想会很顺利,但很快找到我,并告知在postgresql中把一张大的数据表删除掉了,查询表的size并没有改变. 我震惊了,问 ...
随机推荐
- MindSpore 数据加载及处理
参考地址: https://www.mindspore.cn/tutorial/zh-CN/r1.2/dataset.html ==================================== ...
- oracle利用job实现存储过程异步执行
1.背景 在实际开发中,我们可能会利用存储过程批量处理业务, 对应有些存储过程可能会执行很长时间,这时我们需要客户端点操作后,存储过程异步执行 具体实现如下 1.创建处理业务的存储过程:sp_test ...
- 牛客周赛 Round 5
牛客周赛 Round 5 A-游游的字母变换_牛客周赛 Round 5 (nowcoder.com) #include <bits/stdc++.h> #define int long l ...
- lbs 地理位置
lbs 地理位置 https://caorong.github.io/2018/05/04/lbs/ https://www.cnblogs.com/lbser/p/3310455.html http ...
- Python 加载 TensorFlow 模型
1.SavedModel和HDF5加载TensorFlow模型 为了加载一个TensorFlow模型,我们首先需要明确模型的格式.TensorFlow支持多种模型格式,但最常见的两种是SavedMod ...
- .NET 9 优化,抢先体验 C# 13 新特性
前言 微软即将在 2024年11月12日发布 .NET 9 的最终版本,而08月09日发布的.NET 9 Preview 7 是最终发布前的最后一个预览版.这个版本将与.NET Conf 2024一同 ...
- B2B进销存ERP后台管理系统的逻辑架构与设计,AxureRP原型产品经理实战案例
模块分析: 进销存系统是一种用于企业管理库存.销售和采购活动的信息系统.它的主要作用包括但不限于以下几个方面: 1.库存管理 实时库存跟踪:准确记录每种商品的库存数量,确保数据的实时性和准确性. 库存 ...
- C# 菜单项添加复选标记
在网上查找都是说直接用菜单项的Checked属性, toolMenuItem.Checked=!toolMenuItem.Checked; 但是我用了也切换不过来. 有点晕菜了,我用的是vs2017. ...
- Windows提权方式汇总
windows 提权 一.土豆(potato)家族提权 原理 土豆提权就是通过 windows 的 COM(Component Object Model,组件对象模型)类.向指定的服务器端口发送 NT ...
- 《HelloGitHub》第 101 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...