C++ 指针动态内存分配
动态内存分配
- 动态内存分配:即由程序员手动的进行内存空间的分配、内存空间的释放的内存管理操作
- C++代码中,变量、数组等对象的创建,是由C++自动分配内存的,称之为(自动)静态内存分配
- (自动)静态内存管理,不会进行内存空间的自动清理。(无垃圾回收机制)
- 需要手动的管理内存,即手动分配,用完清理
new运算符
- 用于申请并分配内存空间并提供指向该空间的指针(内存地址)
- 基本语法:
- new type 申请普通变量空间
- new type[] 申请数组空间
delete运算符
- 用于释放内存,仅可用于new运算符申请的内存区域
- 基本语法:
- delete 指针 删除普通变量空间
- delete[] 指针 删除数组空间
- 建议:写完new后,立刻写delete,然后再写业务逻辑代码(避免忘记)
int *pt = new int;
*pt = 10;
cout << "申请内存空间存放:" << *pt << endl;
delete pt;
cout << "pt内存空间已释放" << endl;
int *pt2 = new int[3];
pt2[0] = 1; // 指针也可以用下标, 等同于*(p+0)
*(pt2 + 1) = 2; // 等同于 pt[1]
cout << "*pt2申请内存空间大小:" << sizeof(pt2) << endl;
cout << *pt2 << endl;
cout << pt2[1] << endl;
delete[] pt2; // 释放内存空间
cout << "pt2内存空间已释放" << endl;
指针悬挂
- 指针指向的区域已经被delete回收,这种称为:指针悬挂
- 如何避免:
- 不要轻易进行指针之间相互赋值
- delete回收空间之前,确保此空间100%不再被使用
C++ 指针动态内存分配的更多相关文章
- C和指针--动态内存分配
1.为什么需要使用动态内存分配 数组的元素存储于内存中连续的位置上,当一个数组被声明时,它所需要的内存在编译时就被分配.当你声明数组时,必须用一个编译时常量指定数组的长度.但是,数组的长度常常在运行时 ...
- C++指针和动态内存分配
指针和动态内存分配 数组与指针 数组 数组名是一个指针常量. 数组名传递数据时,传递的是地址. 数组作为函数参数时不指定第一维大小. 对象数组 A a[2] = {A(1,2)}; 执行时先调用有参数 ...
- C和指针 第十一章 动态内存分配
声明数组时,必须指定数组长度,才可以编译,但是如果需要在运行时,指定数组的长度的话,那么就需要动态的分配内存. C函数库stdlib.h提供了两个函数,malloc和free,分别用于执行动态内存分配 ...
- 《C和指针》 读书笔记 -- 第11章 动态内存分配
1.C函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放,这些函数维护一个可用内存池. void *malloc(size_t size);//返回指向分配的内存块起始位置的 ...
- C动态内存分配(C与指针实例)
主要初步介绍malloc.free.calloc.realloc的基本.日后会有更详细的内容. malloc.free分别用于动态内存分配和释放. malloc会从内存池里提取一块合适的内存(连续的) ...
- C++学习笔记(十一):void*指针、类型转换和动态内存分配
void*指针 void关键字表示“空类型”的概念.但是,这里的“空类型”不表示“任意类型”,而是表示不存在的意思,也就是说C/C++不允许你写语句void a,不存在类型为void的东西. void ...
- 数据结构基础——指针及动态内存分配(malloc)
一.指针 C语言中的指针是一种数据类型,比如说我们用int *a;就定义了一个指针a,它指向一个int类型的数.但是这个指针是未初始化的,所以,一般的,我们都在创建指针时初始化它,以免出错,在还不吃的 ...
- C和C指针小记(十六)-动态内存分配
动态内存分配 1.1 为什么使用动态内存分配 直接声明数组的方式的缺点: 1) 声明数组必须指定长度限制.无法处理超过声明长度的数组. 2) 如果声明更大的常量来弥补第一个缺点,会造成更多的内存浪费. ...
- c++ 动态数组,指针与动态内存分配
教学内容: 内存的使用 动态内存分配malloc函数 分配内存时使用sizeof运算符 用指针访问内存 以数组的形式访问内存 一.内存的使用 堆(heap) 在程序执行期间分配内存时,内存区域中的这个 ...
- <c和指针>学习笔记5动态内存分配和预处理器
1 动态内存 比如声明数组得时候,我们需要提前预估数组长度,分配大了浪费,少了就更不好操作了.从而引入动态分配,需要的时候再分配. (1)malloc和free void *malloc(size_t ...
随机推荐
- oeasy教您玩转python - 007 - # 字符本质
字符本质 回忆上次内容 hello world 不是从来就有的 来自于unix和c 虽然我们今天有各种先进的学习手段 最早的高级语言学习是从最早的那张打字机用纸的手写代码起源的 所以输出用的是 p ...
- AT_abc180_d 题解
洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 现有 \(STR\) 和 \(EXP\) 两个变量,初始化分别为 \(X\) 和 \( ...
- TIER 1: Sequel
TIER 1: Sequel MySQL MySQL 是一种流行的开源关系型数据库管理系统(RDBMS),它被广泛用于存储和管理大量的结构化数据.MySQL 是由瑞典公司 MySQL AB 开发的,后 ...
- TIER 0: Redeemer
TIER 0: Redeemer Redis Remote Dictionary Server 是一个开源的内存数据存储系统 Redis 是完全基于 内存,"内存"数据库的数据检索 ...
- odoo 开发入门教程系列-一个新应用
一个新应用 房地产广告模块 假设需要开发一个房地产模块,该模块覆盖未包含在标准模块集中特定业务领域. 以下为包含一些广告的主列表视图 form视图顶层区域概括了房产的重要信息,比如name,Prope ...
- mybatis源码分析:插件是什么
在上篇文章中,<mybatis源码配置文件解析之四:解析plugins标签 >分析了mybatis中的plugin标签的解析过程,plugin指的是插件,或者说拦截器更为形象,因为它的作用 ...
- 【云服务器】记录使用腾讯云服务器搭建个人blog网站-【1】服务器配置
服务器购买 第一次写博客,写的不好请见谅 腾讯云教育活动 配置还行,能搭建个网站了果断下单 选择系统 缺点(对我来说):参考于:人生不开窍:Windows Server各版本差异 不能安装window ...
- 【FastDFS】05 Java程序测试上传
创建普通Maven工程 导入所需依赖坐标: <dependencies> <!-- https://mvnrepository.com/artifact/net.oschina.zc ...
- Electronics投稿指南
原地址: https://m.peipusci.com/news/10593.html Electronics的自引率先增后减,2023年度为10.3%.
- 全球2023年自然科学指数(Nature Index),各单位排名表
地址: https://www.nature.com/nature-index/annual-tables/2023/institution/all/all/global 自然科学指数(Nature ...