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并没有改变. 我震惊了,问 ...
随机推荐
- Jmeter强制结束线程
例子:正常的线程是执行2次请求 1.需要实现结果 执行请求1后,判断test1=100,强制结束线程 执行请求1后,判断test1 != 100,继续执行请求2 2. 线程组改造 在请求1后面增加[i ...
- Google的TPU的向量化内存的读取规格——单次读取/写入的数据量
异构加速设备: GPU.TPU.NPU 这几种设备,除了GPU公开了部分硬件设计原理和软件编程范式以外,所有的TPU和NPU的资料都是不公开的,都是被其所属公司保留的,然后这些公司会自己在这些硬件之上 ...
- ubuntu18.04系统环境下使用vs code安装pylint检查python的代码错误
相关: Ubuntu18.04 系统环境下 vscode中忽略pylint某些错误或警告 ============================================ python的代码错 ...
- vscode中文环境配置
1.背景 2.配置 2.1.安装中文包 如果没有按照中文插件需要先按照中文插件 如果你是首次安装,安装完成后会引导你重启,就可以了 2.2.设置成中文环境 打开VSCode软件,按快捷键[Ctrl+S ...
- maven项目打包时排除依赖包
1.背景 为了快速上传jar包到服务器,很多时候我们需要把依赖包单独独立出来,避免每次修改都传依赖包 2.实现方式 maven的pom文件,没有独立依赖包时配置如下: <build> &l ...
- JVM的本地方法栈-通俗理解
1.本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的, 2.其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的N ...
- 曝光!Apache SeaTunnel Catalog 功能设计为何能大大简化用户启用步骤?
Catalog(目录)提供了关于数据库.表格和访问数据所需的信息的元数据,以及统一的 API 来管理元数据,验证连接,让元数据对 Sources(数据源).Sinks(数据汇)和 Web 可访问. C ...
- 9组-Beta冲刺-5/5
一.基本情况(15分) 队名:不行就摆了吧 组长博客:9组-Beta冲刺-5/5 GitHub链接:https://github.com/miaohengming/studynote/tree/mai ...
- SMU Spring 2023 Trial Contest Round 10
A. Remove Duplicates 题意大概就是从左到右数字最先数完的最先输出 所以我们可以在输入每个数时记录每个数的出现次数,然后在循环一遍,每次该数字的次数减1,当数字的次数只剩1的时候就输 ...
- posix是什么都不知道,还好意思说你懂Linux?
Linux开发者越来越多,但是仍然有很多人整不明白POSIX是什么.本文就带着大家来了解一下到底什么是POSIX,了解他的历史和重要性. 一.什么是posix? 1. 概念 POSIX:可移植操作系统 ...